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