Ho implementato la decompressione gzip/zlib dei file come mostrato nei loro esempi sul sito boost.boost gzip decompress array di byte
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);
}
funziona correttamente. Sto anche leggendo i dati da un socket che sto ricevendo da un servizio JSON basato sul resto che è compresso pure. Ho pensato che avrei scritto un'implementazione basata sulla memoria, quanto potesse essere difficile. Bene, ho capito che non capisco i flussi e gli stream buffer come dovrei. Incolpo degli ultimi anni in Java;) .. Così ho iniziato questo percorso.
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);
}
ma io sono ad una perdita quanto a che tipo di flusso che posso usare per ottenere fondamentalmente la decompresso char*
rappresentazione del flusso decompresso. Questo dovrebbe essere facile, e probabilmente lo è, ma ho sprecato le ultime due ore a trovare tentativi falliti.
Grazie mille per la risposta. Farò un tentativo –