Array mit zlib komprimieren
-
Hallo Leute!
Ich moechte ein Array mit boost.iostreams und deren zlib_compressor komprimieren und auch wieder dekomprimieren koennen. Dafuer habe ich ein kleines Testprogramm geschrieben.
#include <iostream> #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/device/back_inserter.hpp> #include <boost/iostreams/filter/zlib.hpp> namespace io = boost::iostreams; int main() { char const data[] = { '1', '2', '3', '4', '5' }; std::vector<char> out; io::filtering_ostream os; os.push(io::zlib_compressor()); os.push(io::back_inserter(out)); os.write(data, sizeof data); std::cout << out.size(); }Und da kommt immer 0 raus, sprich der vector ist leer. Woran kann das liegen?
Gruesse,
Der Kellerautomat
-
Ich benutze Boost.Iostreams zwar nicht, aber ich kann dir auch so sagen, dass da nicht viel Kompression bei herumkommen würde, wenn der Stream für jedes Byte, das er bekommt, sofort eins rausschreibt

Schließe den Stream mal oder schreib so viele Daten, dass der Stream zwischendurch zum Flushen gezwungen wird.
-
Ich habe mal ein os.flush() hinter das write gehaengt. Hat leider nichts geaendert.
-
Das reicht nicht. Ein flush() soll den Ausgabestrom nicht verändern, sondern nur schon gepufferte Daten rausschreiben. Bei einem komprimierenden Strom wäre ersteres aber unausweichlich (Matchsuche muss vorzeitig unterbrochen werden o.ä.).
Deswegen musst du ihn schon schließen oder wenigstens zum Überlauf bringen (z.B. >=1 MB zufällig erzeugte Zahlen sollten reichen).
-
Danke, mit einem zusaetzlich eingefuehrten Scope funktioniert es.
