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