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