boost::iostreams de/compress data from memory question.
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.
CPPer wrote:
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::string stir;
in >> stir;
The >> operators work on a character basis... they dont work well on binary data. Try initializing your string differently and see if you have better luck (similarly later on in your example).
eg <egoots <at> gmail.com> writes:
The >> operators work on a character basis... they dont work well on binary data. Try initializing your string differently and see if you have better luck (similarly later on in your example).
this code works well... #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); io::filtering_ostream out; out.push (io::gzip_compressor()); out.push (ofs); out << stir; } but I just want to know how to do the same thing from memory? Can anyone help me please? Thanks!!!
Now I have found out how to slove this problem. Thanks all!!!
participants (2)
-
CPPer
-
eg