Recent

Author Topic: Help using Streams  (Read 416 times)

ad1mt

  • Sr. Member
  • ****
  • Posts: 488
    • Mark Taylor's Home Page
Help using Streams
« on: December 01, 2025, 07:54:50 pm »
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.
Code: Pascal  [Select][+][-]
  1. {$MODE OBJFPC}
  2. {$MODESWITCH NESTEDCOMMENTS+}
  3.  
  4. program test_compress_1;
  5. uses    sysutils
  6. ,               classes
  7. ,               ZStream
  8. ;
  9. const
  10. BUFFER_SIZE = 94;
  11.  
  12. var
  13. Compressor              : TCompressionStream;
  14. Decompressor    : TDecompressionStream;
  15. CompressedData  : TMemoryStream;
  16. Z_Stream                : TMemoryStream;
  17.  
  18.  
  19. C,I                             :int32;
  20. B                               :byte;
  21. CLEAR_STR               :ansistring;
  22. CLEAR_BYTES             :array[1..BUFFER_SIZE] of byte;
  23. DATA_BYTES              :array[1..BUFFER_SIZE] of byte;
  24. DECOMP_BYTES    :array[1..BUFFER_SIZE] of byte;
  25.  
  26. (*----------------------*)
  27. begin
  28. I:= 1;
  29. C:= 33;
  30. write('Data = ');
  31. while (C < 127) do
  32.         begin
  33.     CLEAR_BYTES[I]:= byte(C);
  34.         write(chr(C));
  35.         Inc(I);
  36.         Inc(C);
  37.         end;
  38. writeln;
  39.  
  40. { Create Streams }
  41. CompressedData:= TMemoryStream.Create();
  42. Compressor:= TCompressionStream.Create(clmax, CompressedData);
  43.  
  44. { Compress the buffer }
  45. Compressor.writebuffer(CLEAR_BYTES,BUFFER_SIZE);
  46. Compressor.Destroy;
  47.  
  48. { read & copy compressed data}
  49.  
  50. CompressedData.Position := 0;
  51.  
  52. Z_Stream:= TMemoryStream.Create();
  53. repeat
  54.         C:= CompressedData.read(DATA_BYTES,BUFFER_SIZE);
  55.         if (C > 0) then Z_Stream.writebuffer(DATA_BYTES,C);
  56. until (C < BUFFER_SIZE);
  57.  
  58. { read & copy compressed data}
  59.  
  60. Decompressor:= TDecompressionStream.Create(Z_Stream);
  61.  
  62. writeln('Decompressed = ');
  63. repeat
  64.         C:= Decompressor.read(DECOMP_BYTES,BUFFER_SIZE);
  65.         if (C > 0) then
  66.                 begin
  67.                 i:= 1;
  68.                 while (i <= BUFFER_SIZE) do
  69.                         begin
  70.                         B:= DECOMP_BYTES[i];
  71.                         write(chr(B));
  72.                         Inc(i);
  73.                         end;
  74.                 end;
  75. until (C < BUFFER_SIZE);
  76.  
  77. CompressedData.Destroy;
  78. Z_Stream.Destroy;
  79. end.
  80.  

dseligo

  • Hero Member
  • *****
  • Posts: 1674
Re: Help using Streams
« Reply #1 on: December 01, 2025, 08:26:57 pm »
Add line
Code: Pascal  [Select][+][-]
  1. Z_Stream.Position := 0;

in line 59 (above Decompressor:= TDecompressionStream.Create(Z_Stream);).

ad1mt

  • Sr. Member
  • ****
  • Posts: 488
    • Mark Taylor's Home Page
Re: Help using Streams
« Reply #2 on: December 01, 2025, 08:31:01 pm »
Many thanks for your speedy reply!

ASerge

  • Hero Member
  • *****
  • Posts: 2477
Re: Help using Streams
« Reply #3 on: December 01, 2025, 08:36:13 pm »
And free Decompressor.

 

TinyPortal © 2005-2018