Hi,

Like the subject says, I'm looking for a TStream implementation that takes another TStream and compresses/decompresses data in gzip format. I would like to read/write gzip data to a stream, any TStream (maybe TFileStream, maybe TMemoryStream, maybe a stream from the network like TSocketStream, etc.).

One would think that the ZStream unit will contain something like that, but it does not. ZStream has:

- TCompressionStream and TDecompressionStream, but they use the "deflate format", which is different than "gzip format" (gzip format at least adds some headers around). So you can't use them to directly read/write data from a xxx.gz file.

- TGZFileStream, which does use the desired "gzip format"... but it can only read local files (constructor takes just a FileName parameter). It cannot read from/to another stream.

Is there a stream class that satisfies both these conditions simultaneously (uses "gzip format" and can read/write to another TStream)?

Offtopic: I probably would avoid the ZStream unit anyway, as it uses PasZLib, which is a Pascal rewrite of the old zlib code. I would prefer to rather use ZLib unit (that links to a Zlib library, usually in so/dll/dylib) instead. Reasons are security (the C zlib library is probably more maintained than gory internals of paszlib) and because I have to distribute Zlib library anyway (libpng depends on it, and I use libpng).

Google found an old thread on lazarus mailing list about this ("FPC, gzip and stream") but without any solution, everything mentioned there has either the limitations of TCompressionStream/TDecompressionStream (no gzip format) or TGZFileStream (not able to work wit ObjectPascal streams).

Thanks in advance for answers,
Michalis
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to