QIODevice類是對所有讀和寫一段字節塊的一個抽象。Qt包含了下面的一些子類:
QFile
訪問本地文件系統中的文件或嵌入的資源。
QTemporaryFile
創建或訪問本地文件系統中的臨時文件。
QBuffer
從一個QByteArrary中讀數據或將數據寫入到一個QByteArray中。
QProcess
運行外部程序並處理進程間的通信。
QTcpSocket
使用TCP協議傳輸一個數據流。
QUdpSocket
通過網絡發送或接收UDP數據流。
其中,QProcess,QTcpSocket,QUdpSocket是順序文件,只能順序訪問,而QFile,QTemporaryFile, QBuffer是隨機訪問文件,可隨機訪問,可使用QIODevice::seek()來重定位文件指針。
另外,Qt也提供了兩個更高級的流處理類,可用於向任何QIODevice設備中讀或寫數據。其中QDataStream用於讀寫二進制數據,而QTextStream用於讀寫文本數據。
讀寫文本
QTextStream負責處理Unicode與系統本地編碼格式或任何其他編碼格式的轉換。QTextStream使用16-位的QChar類型作為數據的基本單元。另外,QTextStream也支持c++的基本數據類型。
使用例子如下所示:
注意:寫數據可能要容易些,但讀數據就要復雜些,如
out<< "Norway" << "Sweden";如果使用in>> str1 >> str2;讀的話,結果卻是str1=”NorwaySweden”,而str2為空。因此,讀數據必須使用專門的程序解析,QTextStream可以逐字符(QChar)地讀取。
可以設置字符編碼,如:
stream.setCodec("UTF-8");
QTextStream也支持一些流操作標志,如:
out<< showbase << uppercasedigits << hex <<12345678;
或
out.setNumberFlags(QTextStream::ShowBase
|QTextStream::UppercaseDigits);
out.setIntegerBase(16);
out<< 12345678;