I need help using Streams.
Here is a small program that shows my problem... please can anyone explain to me why it is not working?
I'm getting a "buffer error" at line 64.
Many thanks.
{$MODE OBJFPC}
{$MODESWITCH NESTEDCOMMENTS+}
program test_compress_1;
uses sysutils
, classes
, ZStream
;
const
BUFFER_SIZE = 94;
var
Compressor : TCompressionStream;
Decompressor : TDecompressionStream;
CompressedData : TMemoryStream;
Z_Stream : TMemoryStream;
C,I :int32;
B :byte;
CLEAR_STR :ansistring;
CLEAR_BYTES :array[1..BUFFER_SIZE] of byte;
DATA_BYTES :array[1..BUFFER_SIZE] of byte;
DECOMP_BYTES :array[1..BUFFER_SIZE] of byte;
(*----------------------*)
begin
I:= 1;
C:= 33;
write('Data = ');
while (C < 127) do
begin
CLEAR_BYTES[I]:= byte(C);
write(chr(C));
Inc(I);
Inc(C);
end;
writeln;
{ Create Streams }
CompressedData:= TMemoryStream.Create();
Compressor:= TCompressionStream.Create(clmax, CompressedData);
{ Compress the buffer }
Compressor.writebuffer(CLEAR_BYTES,BUFFER_SIZE);
Compressor.Destroy;
{ read & copy compressed data}
CompressedData.Position := 0;
Z_Stream:= TMemoryStream.Create();
repeat
C:= CompressedData.read(DATA_BYTES,BUFFER_SIZE);
if (C > 0) then Z_Stream.writebuffer(DATA_BYTES,C);
until (C < BUFFER_SIZE);
{ read & copy compressed data}
Decompressor:= TDecompressionStream.Create(Z_Stream);
writeln('Decompressed = ');
repeat
C:= Decompressor.read(DECOMP_BYTES,BUFFER_SIZE);
if (C > 0) then
begin
i:= 1;
while (i <= BUFFER_SIZE) do
begin
B:= DECOMP_BYTES[i];
write(chr(B));
Inc(i);
end;
end;
until (C < BUFFER_SIZE);
CompressedData.Destroy;
Z_Stream.Destroy;
end.