C++ 可以混合使用QTextStream和QDataStream吗?
需要读取混合文本/二进制文件,我认为同时使用C++ 可以混合使用QTextStream和QDataStream吗?,c++,qt,file-io,C++,Qt,File Io,需要读取混合文本/二进制文件,我认为同时使用QTextStream和QDataStream将是最有效的 该文件如下所示: 一行文字另一行文字4212。。。等等 在一行中输入int,然后在一行中输入100字节的二进制数据,依此类推) 以下是初始化、变量等: // a QFile named in is already opened successfully as binary (without QIODevice::Text) QTextStream stream(&in); QDataS
QTextStream
和QDataStream
将是最有效的
该文件如下所示:
一行文字另一行文字4212
。。。等等 在一行中输入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();
}
它不工作,缓冲区仍然为空。奇怪的是,数字(42、12等)被正确地读入nr
,而不管我用data.readRawData()读入多少字节。它可以是1000字节,但似乎仍然没有读取任何内容。但是,nr_bytes
中的值表示字节已成功读取!更奇怪的是,循环中的最后一个readLine实际上读取二进制数据(至少在遇到零、换行符或其他特殊字符之前)。这意味着,data.readRawData()
根本没有读取任何内容,但其返回值中仍有所需的字节数
这是不是意味着我不能同时使用QTextStream
和QDataStream
,或者我做错了什么?我用std::ifstream
解决了这个问题,在那里你可以混合read()
,getline()
和操作符>()
很好。然而,我仍然很好奇如何使用Qt
流实现同样的效果。