如何知道QDataStream不能反序列化某些内容?

时间:2018-10-29 11:18:14

标签: c++ qt deserialization qdatastream

请考虑来自QDataStream文档的以下代码片段:

QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);    // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a;           // extract "the answer is" and 42

是否有办法知道QDataStream无法将文件内容反序列化为QStringqint32,以及如何处理QDatastream中的反序列化错误?

1 个答案:

答案 0 :(得分:1)

根据官方文档,您可以(并且应该)使用Read Transactions

  in.startTransaction();

  QString str;
  qint32 a;

  in >> str >> a; // try to read packet atomically

  if(in.commitTransaction())
  {
      // read is ok, check the data you had read
  } 
  else
  {
      // wait for more data or show unknown error
  }

如果将文件作为IO设备,则无需事务即可读取,但必须手动检查是否有必要的数据量。使用QDataStream时,应确保数据的顺序和组成。