C++ 使用Boost gzip_解压器解压内存中的数据

C++ 使用Boost gzip_解压器解压内存中的数据,c++,boost,compression,C++,Boost,Compression,我正在尝试使用Boostgzip\u解压器解压内存中的二进制数据。从中,我改编了以下代码: vector<char> unzip(const vector<char> compressed) { vector<char> decompressed = vector<char>(); boost::iostreams::filtering_ostream os; os.push(boost::iostreams::gzip

我正在尝试使用Boost
gzip\u解压器
解压内存中的二进制数据。从中,我改编了以下代码:

vector<char> unzip(const vector<char> compressed)
{
    vector<char> decompressed = vector<char>();

    boost::iostreams::filtering_ostream os;

    os.push(boost::iostreams::gzip_decompressor());
    os.push(boost::iostreams::back_inserter(decompressed));

    boost::iostreams::write(os, &compressed[0], compressed.size());

    return decompressed;
}
矢量解压(常量矢量压缩)
{
向量解压缩=向量();
boost::iostreams::过滤ostream操作系统;
push(boost::iostreams::gzip_decompressor());
push(boost::iostreams::back_inserter(解压缩));
boost::iostreams::write(操作系统,&compressed[0],compressed.size());
减压返回;
}

但是,返回的向量长度为零。我做错了什么?我尝试在操作系统流上调用
flush()
,但没有什么不同

您的代码对我来说适用于这个简单的测试程序:

#include <iostream>
#include <vector>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>

std::vector<char> unzip(const std::vector<char> compressed)
{
   std::vector<char> decompressed = std::vector<char>();

   boost::iostreams::filtering_ostream os;

   os.push(boost::iostreams::gzip_decompressor());
   os.push(boost::iostreams::back_inserter(decompressed));

   boost::iostreams::write(os, &compressed[0], compressed.size());

   return decompressed;
}

int main() {
   std::vector<char> compressed;
   {
      boost::iostreams::filtering_ostream os;
      os.push(boost::iostreams::gzip_compressor());
      os.push(boost::iostreams::back_inserter(compressed));
      os << "hello\n";
      os.reset();
   }
   std::cout << "Compressed size: " << compressed.size() << '\n';

   const std::vector<char> decompressed = unzip(compressed);
   std::cout << std::string(decompressed.begin(), decompressed.end());

   return 0;
}
#包括
#包括
#包括
#包括
std::vector解压(const std::vector压缩)
{
std::vector解压缩=std::vector();
boost::iostreams::过滤ostream操作系统;
push(boost::iostreams::gzip_decompressor());
push(boost::iostreams::back_inserter(解压缩));
boost::iostreams::write(操作系统,&compressed[0],compressed.size());
减压返回;
}
int main(){
std::矢量压缩;
{
boost::iostreams::过滤ostream操作系统;
push(boost::iostreams::gzip_compressor());
push(boost::iostreams::back_插入器(压缩));

操作系统很奇怪,你的例子对我不起作用(产生零长度输出)。也许这是一个构建问题。这很奇怪。它对我来说适用于os X 10.7.5和boost 1.52以及Ubuntu 10.10和boost 1.53。