需要阅读混合文本/二进制文件,我认为同时使用QTextStream
和QDataStream
将是最有效的。
该文件如下所示:
某行文字
另一行文字
42 <&lt; 100字节 二进制数据&gt;
12&lt; 100字节的二进制数据&gt;
......等 一行中的int,然后是一行中的100字节二进制数据,依此类推)
这是初始化,变量等:
// a QFile named in is already opened successfully as binary (without QIODevice::Text)
QTextStream stream(&in);
QDataStream data(&in);
int nr;
int nr_bytes;
char buffer[200];
首先,我测试了从一个流读取是否推进另一个流。如果我从文件中读取带有data.readRawData()
的10个字节,那么stream.readLine()
将读取“of text”,因此它可以正常工作!
但是,如果我从示例文件的开头执行以下操作:
stream.readLine();
stream.readLine();
for (/*...*/)
{
stream >> nr;
stream.readLine();
nr_bytes = data.readRawData(buffer, 100);
stream.readLine();
}
它不起作用,缓冲区仍为空。奇怪的是,无论我用nr
读取了多少字节,数字(42,12等)都被正确读入data.readRawData()
。它可以是1000字节,它似乎仍然没有读取任何东西。但是,nr_bytes
中的值表示字节已成功读取!还是奇怪的是,循环中的最后一个readLine实际上读取了二进制数据(至少在它遇到零,换行或其他特殊字符之前)。这意味着,data.readRawData()
根本没有读取任何内容,但它的返回值仍然包含所需的字节数。
这是否意味着我不能同时使用QTextStream
和QDataStream
,或者我做错了什么?