
Hi! Is there anyone know how to use boost::iostreams to de/compress data from memory ?
From file the code bellow works well:
#include <fstream> #include <iostream> #include <boost/iostreams/filtering_streambuf.hpp> #include <boost/iostreams/copy.hpp> #include <boost/iostreams/filter/gzip.hpp> namespace io = boost::iostreams; int main() { using namespace std; ifstream file("hello.gz", ios_base::in | ios_base::binary); io::filtering_streambuf<io::input> in; in.push(io::gzip_decompressor()); in.push(file); io::copy(in, cout); } But if I changed ifstream into istringstream like this: #include <fstream> #include <sstream> #include <boost/iostreams/filtering_stream.hpp> //#include <boost/iostreams/copy.hpp> #include <boost/iostreams/filter/gzip.hpp> namespace io = boost::iostreams; int main() { using namespace std; ifstream file("hello.gz", ios_base::in | ios_base::binary); io::filtering_istream in; in.push(io::gzip_decompressor()); in.push(file); //std::ostringstream ostr; //io::copy (in, ostr); //std::string stir = ostr.str (); std::string stir; in >> stir; //ofstream ofs("output.gz", ios_base::out | ios_base::binary); ostringstream ostr; io::filtering_ostream out; out.push (io::gzip_compressor()); out.push (ostr); out << stir; stir= out.str(); } the std::string stir always NULL when I want to get the data after compress. Sorry for my bad English.. I am a Chinese.