我按照Boost网站上的示例实现了文件的gzip/zlib解压缩。
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);
}
这个工作得很好。我还从一个基于rest的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*
表示形式。这应该很简单,也可能是,但是我已经浪费了最近几个小时,试图进行无成功尝试。