Распаковать байтовый массив bzip2 - PullRequest
5 голосов
/ 18 августа 2011

Как мне распаковать байтовый массив, сжатый bzip2, используя boost?Я нашел пример здесь , но вход является файлом, поэтому используется ifstream.Документация для меня не очень понятна: (.

Редактировать: я приму альтернативы для повышения.

1 Ответ

7 голосов
/ 18 августа 2011

Вот мой код с использованием сжатия DEFLATE в библиотеке boost.iostreams; Я уверен, что вместо этого вы можете подключить соответствующий компрессор 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);
...