string direkt in datei komprimiert speichern
-
Hallo,
ich suche eine geeignete Möglichkeit, um z.B. einen String komprimiert in eine Datei zu schreiben, bzw. anzuhängen. Da die Daten (reiner Text) ziemlich groß werden (uU einige GB), sollten sie also nicht erst als Datei zwischengespeichert werden.
Beim Entpacken wäre das dann das ähnlich, die komprimierte Datei sollte also nicht vorher entpackt und erst dann ausgelesen werden.
Toll wäre es natürlich auch, wenn man aus dem Archiv "zeilenweise" auslesen könnte, ohne die ganze Datei vorher zu laden.
Kennt ihr da eine gut Möglichkeit(für Linux)?
-
Die Frage ist eher, welche Sprache. Für C gibt es z.B. die libz, aber viele andere Sprachen haben Wrapper um eben diese Bibliothek (z.B. gzstreams für C++).
-
Achso, es handelt sich um C++.
Danke für deinen Tipp, werde mir das mal genauer anschauen.
-
.oO dürfte ein recht unbefriedigendes komprimierungsverhältnis ergeben, wenn man immer bloß einzelne stringfetzen komprimiern tut ... Oo.
-
@Ulf
Ich kenne die zlib und die bzip2.
Als Wrapper für beide kann man die Boost Iostreams verwenden.Zu beachten ist auch was think0r geschrieben hat...
D.h. du solltest ausreichend grosse Stücke anhängen. Das kann ruhig mit mehreren Schreibbefehlen passieren, aber du darfst das File dazwischen nicht zu- und wieder aufmachen.
Sonst fängt der Kompressor nämlich wieder mit einem komplett "frischen" Zustand an, und muss alles neu "lernen". Und wenn das zu oft passiert (=wenn du dazwischen zu wenig Daten "am Stück" schreibst), dann wird er entsprechend schlecht komprimieren können.
In Extremfällen, wenn du z.B. immer nur 2-3 Bytes anhängst, wird das "komprimierte" File sogar wesentlich grösser sein als die unkomprimierten Daten.Das "nicht erst zwischenspeichern" ist auf jeden Fall grundsätzlich kein Problem. Je nachdem ob du zlib/bzip2/... direkt verwendest oder Wrapper die dir das ganze in eine komfortablere Schnittstelle einwickeln wirst du dazu mehr oder weniger Code schreiben müssen, aber gehen tut es auf jeden Fall.
-
think0r schrieb:
.oO dürfte ein recht unbefriedigendes komprimierungsverhältnis ergeben, wenn man immer bloß einzelne stringfetzen komprimiern tut ... Oo.
#schüttel#