Zitat von
Klaus01:
Vielleicht geht es so schneller?
Delphi-Quellcode:
procedure CompressStream(aStream: TStream);
var
zc: TZCompressionStream;
ms: TStream;
begin
ms := (ms as TMemoryStream).Create;
zc := TZCompressionStream.Create(ms, zcMax);
try
zc.CopyFrom(aStream, 0);
finally
zc.Free;
end;
aStream.Free
aStream:=ms;
end;
Grüße
Klaus
2 Fehler fallen sogar mir sofort auf:
1. ms := (ms as TMemoryStream).Create; sollte ne
Exception werfen, wenn dann so:
ms := TMemoryStream.Create;
2. astream müsste als var Parameter deklariert werden. So wird der übergebene Stream freiegegeben, und der lokale nicht.
Zur Logik: Ich darf nen beliebigen Stream reinpacken, und der wird hinterrücks freigeben und durch einen Memorystream ersetzt. Als hätte der Autor überlegt "Hmmm ... wie könnte ich das programmieren, damit der Zweck zwar erfüllt wird, aber die Funktion trotzdem möglichst unerwartet reagiert?"