我无法让 boost::iostreams 的 zlib 过滤器忽略 gzip 标头...似乎将 zlib_param 的 default_noheader 设置为 true 然后调用 zlib_decompressor() 会产生“data_error”错误(标头检查不正确)。这告诉我 zlib 仍然期待找到标头。有没有人得到 boost::iostreams::zlib 来解压缩没有标题的数据?我需要能够读取和解压缩没有两字节标头的文件/流。任何帮助将不胜感激。
这是 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();它已成功解压缩......所以我很困惑为什么这不起作用。
提前致谢。
-冰