QIODeviceclass is the base interface class of all I/O devices in Qt Core .QIODeviceprovides both a common implementation and an abstract interface for devices that support reading and writing of blocks of data. The device can be a memory buffer, a file, or a datastream.Some subclasses like
QFilehave been implemented using a memory buffer for intermediate storing of data. This speeds up programs by reducing read/write operations. Buffering makes functions likegetChar()andputChar()fast, as they can operate on the memory buffer instead of directly on the device itself.
QFileclass provides functions for reading from and writing to files. AQFilemay be used by itself or, more conveniently, with aQTextStreamorQDataStream.
QBufferallows you to access aQByteArray使用QIODevice接口。QByteArrayis treated just as a standard random-accessed file. An example:QBuffer buffer; char ch; buffer.open(QBuffer::ReadWrite); buffer.write("Qt rocks!"); buffer.seek(0); buffer.getChar(&ch); // ch == 'Q' buffer.getChar(&ch); // ch == 't' buffer.getChar(&ch); // ch == ' ' buffer.getChar(&ch); // ch == 'r'调用
open()to open the buffer. Then callwrite()orputChar()to write to the buffer, andread(),readLine(),readAll(),或getChar()to read from it.size()returns the current size of the buffer, and you can seek to arbitrary positions in the buffer by callingseek(). When you are done with accessing the buffer, callclose().
QDataStreamclass provides serialization of binary data to aQIODevice. A data stream is a binary stream of encoded information which is 100% inde- pendent of the host computer’s operating system, CPU or byte order. For example, a data stream that is written by a PC under Windows can be read by a Sun SPARC running Solaris. You can also use a data stream to read/write raw unencoded binary data.For more details on the datatypes that
QDataStreamcan serialize, see 序列化 Qt 数据类型 .
QTextStreamclass provides a convenient interface for reading and writing text.QTextStreamcan operate on aQIODevice,QByteArray或QString. UsingQTextStream‘s streaming operators, you can conveniently read and write words, lines and numbers. It’s also common to useQTextStreamto read console input and write console output.There are three general ways to use
QTextStreamwhen reading text files:
Chunk by chunk, by calling
readLine()orreadAll().Word by word.
QTextStreamsupports streaming intoQStrings,QByteArrays and char* buffers. Words are delimited by space, and leading white space is automatically skipped.Character by character, by streaming into
QCharor char types. This method is often used for convenient input handling when parsing files, independent of character encoding and end-of-line semantics. To skip white space, callskipWhiteSpace().
QByteArraycan be used to store both raw bytes (including\0) and traditional 8-bit ‘\0’-terminated strings. UsingQByteArrayis much more convenient than using const char *. It always ensures that the data is followed by a ‘\0’ terminator, and uses 隐式共享类 (写入时拷贝) 以缩减内存使用量和避免不必要的数据拷贝。除了
QByteArray, Qt also provides theQString类以存储字符串数据。对于大多数目的,QStringis the most appropriate class to use. It stores 16-bit Unicode characters. It is, however, a good idea to useQByteArraywhen you need to store raw binary data, and when memory conservation is critical (for example, with Qt for Embedded Linux).