У меня есть персональный проект, где я должен использовать zlib для распаковки некоторых данных. Я храню двоичные данные в std :: vector, где byte_t не является чем-то другим, кроме unsigned char.Boost Zlib не работает при декомпрессии
Так что я изменил функцию распаковывать ZLIB с их сайта выглядеть следующим образом: http://pastebin.com/spXcRyxa
Все шло отлично на около 90% теста, а затем разбить приложение (некоторые ошибки в addToVector - не смог найти).
Затем я помню, что у boost есть хорошая обертка для zlib. Я скомпилировал boost с zlib и искал, как это сделать с помощью std :: vector (почти все примеры были для std :: string). Но я нашел пример для bzip (Uncompress data in memory using Boost gzip_decompressor), затем я изменил некоторые вещи, чтобы заставить его работать;
std::vector<byte_t> unzip(const std::vector<byte_t> compressed)
{
std::vector<byte_t> decompressed = std::vector<byte_t>();
boost::iostreams::filtering_ostream os;
os.push(boost::iostreams::zlib_decompressor());
os.push(std::back_inserter(decompressed));
boost::iostreams::write(os, reinterpret_cast<const char*>(&compressed[0]), compressed.size());
return decompressed;
}
Мое изменение не соответствует всем тестам. Декомпрессированные данные из boost zlib примерно на 10 000 символов короче, чем обычная библиотека zlib.
Что я делаю неправильно в этой реализации zlib boost? Спасибо вам !
Он работает. Спасибо. Мне не нужно копировать данные, потому что после декомпрессии я не использую сжатые данные: D. –
Вы должны неправильно прочитать мой комментарий о копировании входных данных – sehe