5

如何使用 boost 解压缩 bzip2 压缩的字节数组?我在这里找到了一个示例,但输入是一个文件,因此使用ifstream. 文档对我来说不是很清楚:(。

编辑:我会接受提升的替代方案。

4

1 回答 1

7

这是我在 boost.iostreams 库中使用 DEFLATE 压缩的代码;我确定您可以使用相应的 BZip2 压缩器来代替:

#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/filter/zlib.hpp>
#include <boost/iostreams/filter/bzip2.hpp>   // <--- this one for you
#include <boost/iostreams/write.hpp>

  // Output

  std::ofstream datfile(filename, std::ios::binary);
  boost::iostreams::filtering_ostreambuf zdat;
  zdat.push(boost::iostreams::zlib_compressor());  // your compressor here
  zdat.push(datfile);

  boost::iostreams::write(zdat, BUFFER, BUFFER_SIZE);

  // Input

  std::ifstream datfile(filename, std::ios::binary);
  boost::iostreams::filtering_istreambuf zdat;
  zdat.push(boost::iostreams::zlib_decompressor());
  zdat.push(datfile);

  boost::iostreams::read(zdat, BUFFER, BUFFER_SIZE);

bzip2 压缩器称为bzip2_(de)compressor().

如果您想要字节缓冲区而不是文件,请使用字符串流:

char mydata[N];
std::string mydatastr(mydata, N);
std::istringstream iss(mydatastr, std::ios::binary);
std::ostringstream oss(mydatastr, std::ios::binary);
于 2011-08-17T20:50:34.440 回答