Lempel–Ziv–Oberhumer
Template:Short description {{#invoke:Infobox|infobox}}Template:Template other {{#invoke:Check for unknown parameters|check|unknown=Template:Main other|preview=Page using Template:Infobox software with unknown parameter "_VALUE_"|ignoreblank=y| AsOf | author | background | bodystyle | caption | collapsetext | collapsible | developer | discontinued | engine | engines | genre | included with | language | language count | language footnote | latest preview date | latest preview version | latest release date | latest release version | latest_preview_date | latest_preview_version | latest_release_date | latest_release_version | licence | license | logo | logo alt | logo caption | logo class | logo size | logo title | logo upright | logo_alt | logo_caption | logo_class | logo_size | logo_title | logo_upright | middleware | module | name | operating system | operating_system | other_names | platform | programming language | programming_language | qid | released | replaced_by | replaces | repo | screenshot | screenshot alt | screenshot class | screenshot size | screenshot title | screenshot upright | screenshot_alt | screenshot_class | screenshot_size | screenshot_upright | service_name | size | standard | title | ver layout | website }}Template:Main other Lempel–Ziv–Oberhumer (LZO) is a lossless data compression algorithm that is focused on decompression speed.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
Design
The original "lzop" implementation, released in 1996, was developed by Markus Franz Xaver Johannes Oberhumer, based on earlier algorithms by Abraham Lempel and Jacob Ziv. The LZO library implements a number of algorithms with the following characteristics:
- Higher compression speed compared to DEFLATE compression
- Very fast decompression
- Requires an additional buffer during compression (of size 8 kB or 64 kB, depending on compression level)
- Requires no additional memory for decompression other than the source and destination buffers
- Allows the user to adjust the balance between compression ratio and compression speed, without affecting the speed of decompression
LZO supports overlapping compression and in-place decompression. As a block compression algorithm, it compresses and decompresses blocks of data. Block size must be the same for compression and decompression. LZO compresses a block of data into matches (a sliding dictionary) and runs of non-matching literals to produce good results on highly redundant data and deals acceptably with non-compressible data, only expanding incompressible data by a maximum of 1/64 of the original size when measured over a block size of at least 1 kB.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
Implementations
The reference implementation is written in ANSI C, and it has been made available as free software under the GNU General Public License. The copyright for the code is owned by Markus F. X. J. Oberhumer. It was originally published in 1996. Oberhumer has also written a command-line frontend called lzop.
Versions of LZO are available for the Perl, Python and Java languages. Various LZO implementations are reported to work under AIX, Atari TOS (Atari ST), ConvexOS, IRIX, Linux, Mac OS, Nintendo 64, Palm OS, PlayStation, Solaris, SunOS, VxWorks, Wii, and Win32.
FFmpeg's libavutil library includes its own implementation of LZO<ref name="ffmpeg-lzo">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> as a possible method for lossless video compression. FFmpeg's implementation of the decompressor is also used in OpenConnect in order to support LZO-compressed ESP packets sent by Juniper Networks and Pulse Secure VPN servers.<ref name="openconnect">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
The Linux kernel uses its LZO implementation in some of its features:
- btrfs uses LZO as a possible compression method for file system compression.
- initrd and initramfs use LZO as a possible compression method for initial RAM drive compression.
- SquashFS uses LZO as a possible compression method for file system compression.
- zram uses LZO with run-length encoding called
LZO-RLEas the default compression method for RAM drive compression. - zswap uses LZO as the default compression method for virtual memory compression
References
External links
- Template:Webarchive
- Template:GitHub - Pure Java implementation of the liblzo2 LZO compression algorithm