QDataStream序列化问题

时间:2011-04-11 12:43:01

标签: qt stream

首先是我的代码。

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

3 个答案:

答案 0 :(得分:3)

正如弗兰克所说,QDataStream仍处于最终位置(写完数据后)。如果您不想创建新流,还应该可以调用stream.reset()将流的内部位置放在开头。或类似stream.seek(0)

答案 1 :(得分:1)

试试这个:

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 

答案 2 :(得分:0)

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