首页 > 解决方案 > 直接使用c++流缓冲来解压

问题描述

我的用例是从磁盘读取压缩文件,逐步解压缩并使用生成的数据。

目前我正在将文件内容读取到我分配的临时缓冲区中,将解压 API 指向该缓冲区,等等。问题在于了解临时缓冲区在这种情况下是否真的有必要或有帮助。

在一个实验中,我打开了一个文本文件的流并调用了一次 get()。在调试器中,我可以看到流中的文件缓冲区已按预期包含文本流中的以下字符。(在 msvc 下我找到了它std::ifstream::_Filebuffer::_IGfirst

我正在寻找一种可移植的方式来访问我在调试器中看到的这个缓冲区,用它提供解压缩 API,然后继续读取文件。

我不明白为什么我应该将文件缓冲区复制到我的缓冲区(例如使用 read()),在这种特殊情况下,我会立即消耗缓冲区内容并继续前进。我一般不会质疑缓冲区 I/O 的优点。

编辑:我做了进一步的实验,如果 read() 的目标本身足够大,似乎内部流缓冲区不会被使用。显然我担心的情况并没有真正出现。

标签: c++stream

解决方案


推荐阅读