3

我使用 QDataStream 从文件中读取部分(例如 100 字节)的二进制数据,然后对其进行处理。基本上QDataStream stream(&file)文件是一个QFile。

到目前为止一切正常。但是我想,当不是从文件中逐一读取小数据部分,而是从由具有大量数据的文件馈送的缓冲区中读取小数据部分时,通常处理速度会更快。所以这是我的问题:

  1. 使用 QDataStream 时是否已经在内部完成了这样的缓冲,这样手动实现的缓冲区不会进一步加快处理速度?也就是说,Qt 内部会从文件中读取超过 100 个字节吗?

  2. 如果没有,手动进行这种缓冲的最佳方法是什么?缓冲区?

感谢您的回答和经验,

克里斯

4

1 回答 1

4

QDataStream本身不执行任何缓冲(与 eg 不同QTextStream)。但QFile默认情况下会提供一些缓冲,除非您使用QIODevice::Unbuffered标志打开它。没有关于如何执行缓冲的信息,我不知道是否可以使用手动缓冲来加速。但是顺序阅读是一项常见的任务,我认为默认情况下它会很快工作。

QBufferQByteArray. 如果您的数据块是固定大小的,并且您可以确定任何例如 100 字节的文件片段都可以用 单独解析,那么解决方案很简单:从 中QDataStream读取 a并在其上使用(将在内部使用)。但如果不是您的情况,您需要从缓冲区中删除已解析的数据并在需要时追加新数据,这是一项更复杂的任务。QByteArrayQFileQDataStreamQByteArrayQBuffer

于 2013-06-27T11:14:11.187 回答