Hallo miteinander.
Ich stehe vor folgendem "Problem": ich möchte gerne einen einfachen String per gzip zippen bzw. entzippen. Es sollen keine Archive oder so auf Festplatte geschrieben werden, lediglich der gzip-Algorithmus auf einen String im hauptspeicher angewendet werden.
ich habe im Forum schon von der
Unit ZLib gelesen und dass die gzip beherrsche. U.a. habe ich folgendes Beispiel gefunden und bereits versucht, auf mein Problem umzubauen:
Delphi-Quellcode:
uses ZLib, SysUtils;
Packen:
procedure Compress(InputFileName, OutputFileName:
string);
var InputStream, OutputStream: TFileStream;
CompressionStream:
ZLib.TCompressionStream;
begin
InputStream:=TFileStream.Create(InputFileName, fmOpenRead);
try
OutputStream:=TFileStream.Create(OutputFileName, fmCreate);
try
CompressionStream:=TCompressionStream.Create(clMax, OutputStream);
try
CompressionStream.CopyFrom(InputStream, InputStream.Size);
finally
CompressionStream.Free;
end;
finally
OutputStream.Free;
end;
finally
InputStream.Free;
end;
end;
Entpacken:
procedure Decompress(InputFileName, OutputFileName:
string);
var InputStream, OutputStream: TFileStream;
DeCompressionStream:
ZLib.TDeCompressionStream;
begin
InputStream:=TFileStream.Create(InputFileName, fmOpenRead);
try
OutputStream:=TFileStream.Create(OutputFileName, fmCreate);
try
DecompressionStream:=TDecompressionStream.Create(OutputStream);
try
DecompressionStream.CopyFrom(InputStream, InputStream.Size);
finally
DecompressionStream.Free;
end;
finally
OutputStream.Free;
end;
finally
InputStream.Free;
end;
end;
Ich habe versucht, statt TFileStream die Klassen TMemoryStream und TStringStream zu verwenden, aber ohne den gewünschten Erfolg. Ich habe es einfach nicht hinbekommen. Außerdem habe ich mich schonmal mit den Abrevia-Komponenten beschäftigt, aber dort auch keine gefunden, die mir lediglich einen Datenstrom im Hauptspeicher zippt, ohne diesen anschließend auf Festplatte schreiben zu wollen. Möglich wäre das zur Not, klar, aber einfach unschön.
Daher meine Fragen:
- Kann die Unit Zlib auch wirklich mit gzip arbeiten und wie kann ich dies auch wirklich sicherstellen?
- Kann mir jemand das obige Beispiel so umstellen, dass meine Anforderungen erfüllt werden? Also dass die Funktionen einfach einen String als Input bekommen und den ent-/gezippten String als Output liefern? Eine komplett neue Implementierung wäre natürlich auch willkommen .
Vielen lieben Dank schonmal!!!