1. 程式人生 > >QT---之QDataStream的使用概念

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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!