然后我使用 QDataStream 从文件中读取部分二进制数据(例如 100 字节)进行处理。基本上 QDataStream stream(&file)
文件是一个 QFile。
目前一切正常。但我想一般来说,当小数据部分不是从文件中一个一个地读取,而是从一个缓冲区中读取时,处理速度会更快,该缓冲区由具有更大数据量的文件提供。所以这是我的问题:
使用 QDataStream 时是否已经在内部完成了这样的缓冲,这样手动实现的缓冲区就不会进一步加快处理速度?也就是说,Qt 内部会从文件中读取超过 100 个字节?
如果没有,手动进行此类缓冲的最佳方法是什么? QBuffer?
感谢您的回答和经验,
克里斯
最佳答案
QDataStream
本身不执行任何缓冲(不像 QTextStream
)。但是QFile
默认情况下提供一些缓冲,除非您使用 QIODevice::Unbuffered
打开它旗帜。没有关于缓冲是如何执行的信息,我不知道是否可以使用手动缓冲来加速它。但顺序阅读是一项常见任务,我认为默认情况下会很快。
QBuffer
为 QByteArray
提供 IO 接口(interface).如果您的数据 block 是固定大小的,并且您可以确定任何例如文件的 100 byte slice 段可以用 QDataStream
单独解析,解决方案很简单:阅读 QByteArray
来自 QFile
并使用 QDataStream
在那QByteArray
(QBuffer
将在内部使用)。但如果不是您的情况,则需要从缓冲区中删除已解析的数据并在需要时追加新数据,这是一项更复杂的任务。
关于qt - 使用 QDataStream 读取文件 : Is it faster with a buffer? 怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339174/