【问题标题】:QDataStream Serialization ProblemQDataStream 序列化问题
【发布时间】:2011-04-11 12:43:00
【问题描述】:

这是我的代码。

QByteArray buff;
QDataStream stream(&buff, QIODevice::ReadWrite);
stream.setVersion(QDataStream::Qt_4_7);
stream << 5;
stream << 6;
qDebug() << buff;
int x;
int y;
stream >> x >> y;
qDebug() << x << y;

我希望 x 为 5,y 为 6。但它显示为 0 0 这是输出

"
0 0

【问题讨论】:

    标签: qt stream


    【解决方案1】:

    正如弗兰克所说,QDataStream 仍然在结束位置(在写入数据之后)。如果不想创建新的流,也应该可以调用stream.reset() 将流的内部位置放在开头。或者类似stream.seek(0)

    【讨论】:

    • 这帮助我解决了一个不同(但相关)的问题:事实证明,在支持 QDataStream 的 QByteArray 上调用 clear() 不会重置流位置!所以,stream &lt;&lt; (int)5; buff.clear(); stream &lt;&lt; (int)6; 将导致buff.size() 报告8,而不是4。需要重置流。
    【解决方案2】:

    试试这个:

    QByteArray buff;
    QDataStream stream(&buff, QIODevice::ReadWrite);
    stream.setVersion(QDataStream::Qt_4_0);
    stream << 5;
    stream << 6;
    qDebug() << buff.toHex();
    
    int x;
    int y;
    
    // This line will move the internal QBuffer to position 0
    stream.device()->reset();
    
    stream >> x >> y;
    qDebug() << x << y;
    

    输出:

    "0000000500000006" 
    5 6 
    

    【讨论】:

      【解决方案3】:

      由于数据流的内部状态(流位置),您不能同时使用单个 QDataStream 从/向 QByteArray 读取/写入。尝试使用第二个 QDataStream 进行读取。

      【讨论】:

        猜你喜欢
        • 2014-08-12
        • 2013-11-01
        • 2012-04-25
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多