【发布时间】:2018-03-11 13:40:02
【问题描述】:
给定一个 C++ std::istream 输入内存流,是否可以以任何方式直接将该流中的数据写入 C 文件流 (FILE*) 而无需先将数据写入磁盘?
我问的原因是我有一个采用FILE* 的 C 接口,我想为此透明地支持压缩或未压缩的输入文件。
这个想法是编写一个包装函数来获取输入文件,然后使用boost::iostreams 创建一个过滤流,在必要时进行解压缩,然后以某种方式将解压缩的数据转发到 C API。
直接的方法是解压压缩文件,将解压后的数据写入磁盘,然后fopen临时文件。不过,我想避免创建临时文件。
另一种选择是解压内存中的所有数据,然后使用fmemopen 获得一个FILE* 到解压后的数据。这意味着我可能不得不分配大量数据,但我更希望看到一个缓冲的解决方案。这有可能吗?
【问题讨论】:
-
看看
open_memstream它可能会做你想做的事。 -
如果您想要流式传输/缓冲数据,
pipe和fdopen可能比fmemopen更好。 -
boost::zlib 有帮助吗?