我使用QDataStream从文件中读取部分二进制数据(例如100字节),然后进行处理。基本上是QDataStream stream(&file)
,文件是QFile。
到目前为止一切都很好。但我想,通常情况下,当不是从文件中一个接一个地读取小数据部分,而是从具有较大数据量的文件提供的缓冲区时,处理速度会更快。以下是我的问题:
-
当使用QDataStream时,这样的缓冲是否已经在内部完成,这样手动实现的缓冲就不会进一步加快处理速度?也就是说,内部Qt会从文件中读取超过100个字节的数据吗?
-
如果没有,手动进行这种缓冲的最佳方式是什么?Q缓冲区?
感谢您的回答和经验,
Chris
QDataStream
本身不执行任何缓冲(与例如QTextStream
不同)。但QFile
默认情况下提供一些缓冲,除非您使用QIODevice::Unbuffered
标志打开它。没有关于缓冲是如何执行的信息,我也不知道是否可以使用手动缓冲来加速。但顺序阅读是一项常见的任务,我认为事实上它会很快奏效。
QBuffer
为QByteArray
提供IO接口。如果你的数据块是固定大小的,并且你可以确保文件的任何例如100字节的片段都可以用QDataStream
单独解析,那么解决方案很简单:从QFile
中读取QByteArray
,并在该QByteArray
上使用QDataStream
(QBuffer
将在内部使用)。但如果情况并非如此,则需要从缓冲区中删除解析后的数据,并在需要时附加新数据,这是一项更复杂的任务。