【发布时间】:2013-03-11 23:48:07
【问题描述】:
我正在尝试使用 boost iostream 和 gzip 压缩数组中的数据,这是我的代码:
struct String_sink : public boost::iostreams::sink
{
std::string& s;
String_sink(std::string& s):s(s){}
std::streamsize write(const char* s, std::streamsize n)
{
this->s.append(s, n);
return n;
}
};
boost::iostreams::stream< boost::iostreams::array_source > source ((char*)dataBitstream.GetData(), dataBitstream.GetNumberOfBytesUsed());
std::string compressed;
boost::iostreams::filtering_streambuf<boost::iostreams::input> outStream;
outStream.push(boost::iostreams::gzip_compressor(1));
outStream.push(source);
boost::iostreams::copy(outStream, String_sink(compressed));
虽然这会压缩数据,但它会将其作为文本进行。我希望它在 binary 中完成。原因是如果我使用 ios_base::binary 标志将“dataBitstream”保存到文件中,然后使用 gzip.exe 压缩文件,结果大小比我在代码中得到的小 50%。这两种情况我都使用“1”作为压缩级别。如果没有二进制标志,文件确实会压缩到与我在代码中看到的大小相同。
所以有人知道如何将数组压缩为二进制吗?到目前为止,我已经尝试使用std::stringstream::binary 标记的字符串流作为输入,并为调用read() 函数的字符串流创建一个接收器。这不起作用。
是否可以强制将数组压缩为二进制数据??
【问题讨论】:
标签: c++ boost binary compression gzip