Delphi-Quellcode:
var
Len: integer;
Buffer: array[0..1023] of Byte;
...
begin
...
while SrcStream.Position < SrcStream.Size do
begin
Len := SrcStream.Size - SrcStream.Position;
if Len > SizeOf(Buffer) then Len := SizeOf(Buffer);
SrcStream.Read(Buffer, Len);
EncodeBuffer(Buffer, Buffer, Len);
DestStream.WriteBuffer(Buffer, Len);
end;
...
Wichtig! EncodeBuffer() sollte nach Möglichkeit inplaced arbeiten.
oder
Delphi-Quellcode:
var
Len: integer;
Buffer: array[0..1023] of Byte;
...
begin
...
repeat
Len := SrcStream.Read(Buffer, SizeOf(Buffer)); // .Read statt .ReadBuffer um Exceptions zu vermeiden
EncodeBuffer(Buffer, Buffer, Len);
DestStream.WriteBuffer(Buffer, Len);
until Len = 0;
...
end;
Dies vermeidet die Seek-Aufrufe in den Dateistream durch das
OS um .Position und .Size zu berechnen. Dadurch wird also der Dateistream nur sequentiell gelesen und dies ist erheblich schneller !! Probier es aus mit großen Files.
Gruß Hagen