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*
暮れています。これは簡単なはずで、おそらくそうですが、私はここ数時間、失敗した試みを考え出すのに無駄にしています。