Implementé la descompresión de archivos gzip/zlib como se muestra en sus ejemplos en el sitio de impulso.impulsar gzip descomprimir 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);
}
esto funciona bien. También estoy leyendo datos de un socket que obtengo de un servicio JSON en reposo que también está comprimido. Pensé que escribiría una implementación basada en memoria, qué difícil podría ser eso. Bueno, descubrí que no entiendo las transmisiones y los buffers de transmisión como debería. Culpo a los últimos años en Java;) .. Así que comencé por este camino.
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);
}
pero estoy en una pérdida en cuanto a qué tipo de corriente que puede utilizar para obtener básicamente el descomprimido char*
representación de la corriente descomprimido. Esto debería ser fácil, y probablemente lo sea, pero he estado perdiendo el último par de intentos infructuosos.
Muchas gracias por su respuesta. Voy a darle una oportunidad –