我在获取boost::iostreams的zlib过滤器以忽略gzip header 方面遇到麻烦...似乎将zlib_param的default_noheader设置为true,然后调用zlib_decompressor()会产生“data_error”错误(错误的 header 检查)。这告诉我zlib仍然期望找到 header 。
有没有人得到boost::iostreams::zlib来解压缩没有标题的数据?我需要能够读取和解压缩没有两字节 header 的文件/流。任何帮助将不胜感激。

这是boost::iostreams::zlib文档提供的示例程序的修改版本:

#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

int main(int argc, char** argv)
{
    using namespace std;
    using namespace boost::iostreams;

    ifstream ifs(argv[1]);
    ofstream ofs("out");
    boost::iostreams::filtering_istreambuf in;
    zlib_params p(
            zlib::default_compression,
            zlib::deflated,
            zlib::default_window_bits,
            zlib::default_mem_level,
            zlib::default_strategy,
            true
    );

    try
    {
        in.push(zlib_decompressor(p));
        in.push(ifs);
        boost::iostreams::copy(in, ofs);
        ofs.close();
        ifs.close();
    }
    catch(zlib_error& e)
    {
        cout << "zlib_error num: " << e.error() << endl;
    }
    return 0;
}

我知道我的测试数据还不错;我写了一个小程序在测试文件上调用gzread()。它已成功解压缩...所以我对为什么它不起作用感到困惑。

提前致谢。

-冰

最佳答案

我认为您想要做的是对here进行描述的操作,它可以调整window bits参数。

例如

zlib_params p;
p.window_bits = 16 + MAX_WBITS;

in.push(zlib_decompressor(p));
in.push(ifs);

我认为MAX_WBITS在zlib.h中定义。

关于c++ - boost::iostreams::zlib::default_noheader似乎被忽略了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3248818/

10-14 13:17