Pure pascal LZO and SynLZ compression units
In our Source Code repository you would have perhaps noted the SynLZ.pas and SynLZO.pas units.
These are two in-memory compression units, optimized for speed.
SynLZ is a brand new LempelZiv-based compression algorithm, the fastest around for compression speed, so very suitable for using on Server side, with very low CPU consumption.
The SynLZO unit implements Synopse LZO Compression:
- it's an upgraded and fully rewritten version of our MyLZO unit;
- SynLZO is a very FAST portable loss-less data compression library written in optimized pascal code for Delphi 3 up to Delphi XE with a tuned asm version available;
- offers *extremely* fast compression and decompression with good compression rate, in comparaison with its speed;
- original LZO written in ANSI C - pascal+asm conversion by A.Bouchez;
- simple but very fast direct file compression: SynLZO compressed files read/write is faster than copying plain files!
The SynLZ unit implements Synopse LZO Compression:
- SynLZ is a very FAST lossless data compression library written in optimized pascal code for Delphi 3 up to Delphi XE with a tuned asm version available;
- symmetrical compression and decompression speed (which is very rare above all other compression algorithms in the wild);
- good compression rate (same range than LZO);
- fastest average compression speed (ideal for xml/text communication, e.g.) - LZO is faster on decompression, but slower on compression.
Even if SynLZO is a pascal conversion of the LZO algorithm, the SynLZ unit implements a new compression algorithm with the following features:
- hashing+dictionary compression in one pass, with no Huffman table;
- optimized 32bits control word, embedded in the data stream;
- in-memory compression (the dictionary is the input stream itself);
- compression and decompression have the same speed (both use hashing);
- thread safe and loss-less algorithm;
- supports overlapping compression and in-place decompression;
- code size for compression/decompression functions is smaller than LZO's.
SynLZ is used e.g. as the default compression algorithm for our ORM framework for Client - Server communication, resulting in very good response time and bandwidth usage, especially with JSON content.
See the corresponding forum post for details and comments