我正在尝试使用 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));
虽然这会压缩数据,但它会将其作为文本进行。我希望它以二进制形式进行。原因是如果我使用标志将“dataBitstream”保存到文件中ios_base::binary
,然后使用 gzip.exe 压缩文件,结果大小比我在代码中得到的小 50%。这两种情况我都使用“1”作为压缩级别。如果没有二进制标志,文件确实会压缩到与我在代码中看到的大小相同的大小。
所以有人知道如何将数组压缩为二进制吗?到目前为止,我已经尝试使用std::stringstream::binary
标记的字符串流作为输入,并为调用该read()
函数的字符串流创建一个接收器。这没有用。
是否可以强制将数组压缩为二进制数据?