Как узнать, что QDataStream не может десериализовать что-то? - PullRequest
0 голосов
/ 29 октября 2018

Пожалуйста, рассмотрите следующий фрагмент кода из документации 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 Ответ

0 голосов
/ 29 октября 2018

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

  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 вы должны быть уверены в последовательности и составе данных.

...