QT---之QDataStream的使用概念
// QDataStream是資料流,相當於資料管道,遮蔽了資料轉換過程。
// 可以連線到一個裝置上,這個裝置可以是socket, file,或buffer
// 資料的表達方式,實際上是大端序,即大端在尾(大端在記憶體低地址).
// 更符合人們的閱讀方式。
// QDataStream 支援QString 物件,丟棄了表達不太確切的buffer[xxxx]
// 物件的長度是可以知道的。 可以向QFile 輸出資料看看,見例子程式
// QProcess、QTcpSocket、QUdpSoctet 是順序訪問裝置,它們的資料只能訪問一遍,
// 也就是說,你只能從第一個位元組開始訪問,直到最後一個位元組。
// QFile、和 QBuffer 是隨機訪問裝置,你可以從任何位置訪問任意次數,
// 還可以使用 QIODevice::seek() 函式來重新定位檔案指標。
#include <QtGui>
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
int a=0x55aa;
int b=0x12345678;
QString str = "this is a string";
int c,d;
QFile file("test.dat");
if(!file.open(QIODevice::WriteOnly))
{
printf("can't open file for write\n");
exit(1);
}
QDataStream ds(&file);
ds << a << b << str;
file.close();
if(!file.open(QIODevice::ReadOnly))
{
printf("can't open file for read\n");
exit(1);
}
QDataStream ds2(&file);
QString qstr;
ds2 >> c >> d >> qstr;
file.close();
printf("a:%x, b:%x\n",a,b);
printf("c:%x, d:%x, str:%s\n",c,d,qstr.toLatin1().data());
return 0;
}$ hexdump -C test.dat
00000000 00 00 55 aa 12 34 56 78 00 00 00 20 00 74 00 68 |..U..4Vx... .t.h|
00000010 00 69 00 73 00 20 00 69 00 73 00 20 00 61 00 20 |.i.s. .i.s. .a. |
00000020 00 73 00 74 00 72 00 69 00 6e 00 67 |.s.t.r.i.n.g|
由此可見,資料流在序列化資料時(輸入或者輸出),是按物件來操作的,對於QString 物件輸入,它知道
首先取得0x20個長度, 後面是該QString 物件的資料
---------------------
作者:hejinjing_tom_com
來源:CSDN
原文:https://blog.csdn.net/hejinjing_tom_com/article/details/50010975?utm_source=copy
版權宣告:本文為博主原創文章,轉載請附上博文連結!