liblzg

a minimalist lossless data compression library

About

liblzg is a minimal implementation of an LZ77 class compression library. The main characteristic of the library is that the decoding routine is very simple, fast, and requires no memory.

In general, liblzg does not compress as well as zlib, for instance. On the other hand the decoder is very simple and very fast - ideal for systems with tight memory limits or limited processing capabilities.

Also, the decompression routine is easliy ported to just about any conceivable programming language (assembly language, JavaScript, etc).

Features

The main features of libzlg are:

Download

The latest release of liblzg is v1.0.8 (2014-09-10). The source code and documentation can be downloaded here:

The archive contains:

Since liblzg is fully portable, it should work with just about any operating system and compiler.

Documentation

The API documentation can be found here.

Performance

To give a picture of how liblzg performs, here is a comparison against zlib and bzip2 at compressing and decompressing the Cantebury Calgary Corpus (a 3.2 MB data set of mixed content). The "level" (on the horizontal axis) is an option to the encoder, basically telling it how hard it should try to achieve a good compression ratio. Level 1 means "be as quick as you can", while level 9 means "try as hard as you can".

The tests were performed on an AMD 64-bit 2.5 GHz 4850e CPU under Ubuntu 10.04 (64-bit).

Compression ratio

The compression ratio of liblzg is not guite as good as the rivaling compression libraries, but yet fairly close.

Compression speed

The compression speed of liblzg is similar to zlib and bzip2. The main reason that liblzg is slower than zlib is that liblzg uses a larger sliding window (up to 512 KB, compared to maxiumum 32 KB for zlib).

Decompression speed

Decompression is where liblzg really shines. It is almost twice as fast as zlib, and more than 10 times as fast as bzip2. Also, remember that liblzg requires no memory during decompression.

Conclusion: The liblzg library is ideal for pre-compressing content that is to be used in environments where speed and memory is of essence.

Safe vs. Unsafe operation

Unlike many other compression libraries that are designed to be very fast, liblzg is safe by default with regards to data corruption and buffer overflow. However, it is possible to configure the decompression routine of liblzg to ignore data integrity and buffer boundary checks, but it is not recommended (it is usually only worth it in very special cases).

Safe vs unsafe

For the Calgary Corpus data set, disabling the safe mode improves the decompression speed by roughly 12%.

Project

The project is hosted on Gitorious, where you can check out the latest development source code, etc.