Я реализовал распаковку файлов gzip/zlib, как показано в их примерах на сайте boost.boost gzip decasp byte array
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);
}
это работает нормально. Я также читаю данные из сокета, который я получаю от службы 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*
представление распакованного потока. Это должно быть легко и возможно, но я трачу последние пару часов на неудачные попытки.
Большое спасибо за ваш ответ. Я дам ему попробовать –