可以增强iostreams读取和压缩gzip文件吗?

ATe*_*emp 6 c++ gzip boost-iostreams

我正在使用boost iostreams读取一个gzip压缩文件:以下工作正常:

 namespace io = boost::iostreams;
  io::filtering_istream in;
  in.push(boost::iostreams::basic_gzip_decompressor<>());
  in.push(io::file_source("test.gz"));
  stringstream ss;
  copy(in, ss);
Run Code Online (Sandbox Code Playgroud)

但是,我不想把整个gzip压缩文件读入内存.我希望能够逐步读取文件.

例如,如果我有一个从istream初始化自己的数据结构X,

X x;
x.read(in);
Run Code Online (Sandbox Code Playgroud)

失败.据推测,这是因为如果我们正在进行部分流,我们可能不得不将字符放回到流中.任何想法是否提升iostreams支持这个?

Die*_*ühl 1

根据iostream 文档,该类型boost::io::filtering_istream源自std::istream. 也就是说,应该可以将其传递到任何std::istream&需要的地方。如果您在运行时出现错误,因为您需要unget()putback()字符,您应该查看pback_size指定最多返回多少个字符的参数。我没有在文档中看到这个参数的默认值是什么。

如果这不能解决您的问题,您能否准确描述您的问题是什么?从表面上看应该可行。