Как узнать, что 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 ответ


Согласно официальной документации, вы можете (и должны) использовать 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
  }

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


Есть идеи?

10000