Im Prinzip könnte man sowas selber Implementieren.
TZCompressionStream ist nach außen ein Stream, welchen man nun an SaveToStream übergeben könnte.
Im Constructor gibt man diesem aber einen anderen Stream mit, wie z.B. einen TFileStream.
Alles was reinkommt, wird komprimiert und an den anderen Stream weitergegeben.
Dieser komprimierte Stream ist aber mit nichts kompatibel, kann also nur mit dem beigelegten TDecompessStream entpackt werden.
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils, SimpleCompressStream;
var
C: TCompessStream;
D: TDecompessStream;
X: AnsiString;
begin
try
C := TCompessStream.Create(ChangeFileExt(ParamStr(0), '
.dat'));
try
X := '
123456789';
C.WriteBuffer(X[1], Length(X));
X := '
abcdefghij';
// Mehreres in einem Kompressionsteil simulieren
C.WriteBuffer(X[1], Length(X));
C.Flush;
// einen neuen Kompressionsteil simulieren
X := '
klmnopqrstubwxyz';
C.WriteBuffer(X[1], Length(X));
finally
C.Free;
end;
D := TDecompessStream.Create(ChangeFileExt(ParamStr(0), '
.dat'));
try
SetLength(X, 9);
D.ReadBuffer(X[1], Length(X));
WriteLn(X);
// 123456789
SetLength(X, 10);
D.ReadBuffer(X[1], Length(X));
WriteLn(X);
// abcdefghij
SetLength(X, 16);
D.ReadBuffer(X[1], Length(X));
WriteLn(X);
// klmnopqrstubwxyz
finally
D.Free;
end;
D := TDecompessStream.Create(ChangeFileExt(ParamStr(0), '
.dat'));
try
SetLength(X, 35);
D.ReadBuffer(X[1], Length(X));
WriteLn(X);
// 123456789abcdefghijklmnopqrstubwxyz
finally
D.Free;
end;
WriteLn('
ende...');
ReadLn;
except
on E:
Exception do begin
WriteLn(E.ClassName, '
: ', E.
Message);
ReadLn;
end;
end;
end.