我实现了文件的 gzip/zlib 解压缩,如 boost 站点上的示例所示。
void CompressionUtils::Inflate(std::ifstream& inputFile,
std::ofstream& outputFile)
{
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::gzip_decompressor());
in.push(inputFile);
boost::iostreams::copy(in, outputFile);
}
这很好用。我还从一个套接字读取数据,这些数据来自一个基于休息的 JSON 服务,该服务也是压缩的。我想我会写一个基于内存的实现,这有多难。好吧,我发现我不理解流和流缓冲区。我责怪Java的过去几年;)..所以我开始了这条路。
void CompressionUtils::Inflate(char* compressed,
int size,
char* decompressed)
{
boost::iostreams::stream<boost::iostreams::array_source> source(compressed,size);
//std::stringstream str;
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::gzip_decompressor());
in.push(source);
//boost::iostreams::copy(in, str);
}
但是我不知道我可以使用什么样的流来基本上获得char*
解压流的解压表示。这应该很容易,而且可能很容易,但我一直在浪费最后几个小时来提出不成功的尝试。