Как узнать, что 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 не может десериализовать содержимое файла в QString а также qint32 и как обрабатывать такие ошибки десериализации в QDatastream?

1 ответ

Решение

Согласно официальной документации, вы можете (и должны) использовать транзакции чтения:

  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
  }

Если у вас есть файл в качестве устройства ввода-вывода, вы можете читать без транзакций, но вы должны вручную проверить, доступен ли необходимый объем данных. При использовании QDataStream вы должны быть уверены в последовательности и составе данных.

Другие вопросы по тегам