Hi,
nur zur Information hab ich meine Variante der gzip Decompression mal angefügt.
Hierfür benutze ich schlicht und ergreifend die verbesserte version der Borland
ZLib von
www.dellapasqua.com.
Ein paar Änderungen waren dazu jedoch nötig:
1) Um GZIP-Streams lesen zu können muss das
ZLib Object anders initialisiert werden, nämlich so, dass kein Header und keine Adler-Checksum verwendet wird.
Der parameter "windowBits" muss also mit negativem Wert belegt werden und DeflateInit2(..) muss verwendet werden statt DeflateInit(..).
Zur Info: DeflateInit(..) ruft implizit DeflateInit2(..) auf.
2) Die Implementation im original ZLibEx.pas hat kein "rewind" auf den unbenutzten Part des gelesenen streams ausgeführt.
Jetzt schon
Speichern als GZIP ist auch im TZCompressionStream aufgenommen aber bislang ungetestet.
Performance:
Da der Dateilink auf test.tar.bz nicht mehr geht hab ich eine Datei mit ca. 3,5Mb entpackt und komme dann auf max 0,35ms auf nem alten 988MHz Schlepptop.
"jbg" hat schon bemerkt dass die Implementation der AdDeflate.pas ziemlich unwirtschaftlich in Punkto CPU-Costs ist, dem kann ich nur beipflichten.
Der Weg über
ZLib ist wohl wesentlich effektiver.
Gruss,
O.