qt - 使用 QDataStream 读取文件 : Is it faster with a buffer? 怎么做?

标签 qt stream buffer qfile

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

目前一切正常。但我想一般来说,当小数据部分不是从文件中一个一个地读取,而是从一个缓冲区中读取时,处理速度会更快,该缓冲区由具有更大数据量的文件提供。所以这是我的问题:

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

  2. 如果没有,手动进行此类缓冲的最佳方法是什么? QBuffer?

感谢您的回答和经验,

克里斯

最佳答案

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

QBufferQByteArray 提供 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/

相关文章:

c++ - 如何解决两个库的两个头文件声明冲突?

iphone - 可以在 iPhone 上串流 mms、ASX、RTSP 流吗?

c# - MemoryStream.WriteTo(Stream destinationStream) 与 Stream.CopyTo(Stream destinationStream)

c++ - 将缓冲区发送到 boost::asio::buffer 后是否需要删除缓冲区?

c++ - OpenGL着色器输入

html - 另一个 : Force Chrome to fully buffer mp4 video

c++ - Qt 用西里尔文路径打开文件

c++ - 如何获取 QT 主函数 argv 参数作为 unicode 编码格式

python - Flask View 的流式 shell 输出有效,但永远不会结束

c++ - Qt Creator - SFML 链接到控制台项目