Lempel–Ziv–Oberhumer (LZO)는 압축-해제 속력에 초점을 맞춘 무손실 데이터 압축 알고리즘입니다.
Design
1996년에 출시된 원래의 "lzop" 구현은 Abraham Lempel과 Jacob Ziv에 의한 초기 알고리즘에 기반을 둔 Markus Franz Xaver Johannes Oberhumer에 의해 개발되었습니다. LZO 라이브러리는 다음과 같은 특성을 가진 여러 알고리즘을 구현합니다:
- DEFLATE 압축에 비해 압축 속력이 더 빠릅니다.
- 매우 빠른 압축-해제
- 압축 중 추가 버퍼가 필요합니다 (압축 수준에 따라 8 kB 또는 64 kB, 크기)
- 소스 및 대상 버퍼 외에 압축-해제에 추가 메모리가 필요하지 않습니다.
- 사용자가 압축률과 압축 속력 사이의 균형을 조정하면서도 압축-해제 속도에는 영향을 미치지 않도록 합니다.
LZO는 중복 압축 및 제자리 압축-해제를 지원합니다. 블록 압축 알고리즘으로서, 그것은 데이터의 블록을 압축하고 압축-해제합니다. 압축과 압축-해제에 대해 블록 크기는 같아야 합니다. LZO는 데이터의 블록을 일치 항목 (슬라이딩 사전)과 일치하지 않는 리터럴의 실행으로 압축하여 매우 중복된 데이터에 대해 좋은 결과를 생성하고 압축 불가능한 데이터를 허용 가능한 수준으로 처리하며, 적어도 1 kB의 블록 크기에 걸쳐 측정될 때 압축 불가능한 데이터를 원래 크기의 최대 1/64로만 확장합니다.
Implementations
참조 구현은 ANSI C로 작성되었고, GNU General Public License에 따라 자유 소프트웨어로 제공되어 왔습니다. 코드의 저작권은 Markus F. X. J. Oberhumer가 소유합니다. 그것은 원래 1996년에 출판되었습니다. Oberhumer는 lzop이라는 명령-줄 프런트엔드도 작성해 왔습니다.
LZO의 버전은 Perl, Python, 및 Java 언어에 사용할 수 있습니다. 다양한 LZO 구현은 AIX, Atari TOS (Atari ST), ConvexOS, IRIX, Linux, Mac OS, Nintendo 64, Palm OS, PlayStation, Solaris, SunOS, VxWorks, Wii, 및 Win32에서 작동하는 것으로 보고되었습니다.
FFmpeg의 libavutil 라이브러리에는 손실-없는 비디오 압축을 위한 가능한 방법으로 LZO의 자체 구현이 포함되어 있습니다. FFmpeg의 압축 해제기의 구현은 Juniper Networks 및 Pulse Secure VPN 서버에서 보낸 LZO-압축된 ESP 패킷을 지원하기 위해 OpenConnect에서도 사용됩니다.
리눅스 커널은 일부 기능에 LZO 구현을 사용합니다:
- btrfs는 파일 시스템 압축을 위한 가능한 압축 방법으로 LZO를 사용합니다.
- initrd와 initramfs는 초기 RAM 드라이브 압축을 위한 가능한 압축 방법으로 LZO를 사용합니다.
- SquashFS는 파일 시스템 압축을 위한 가능한 압축 방법으로 LZO를 사용합니다.
- zram은 RAM 드라이브 압축을 위한 기본 압축 방식으로 LZO-RLE라는 실행-길이 인코딩을 적용한 LZO를 사용합니다.
- zswap은 가상 메모리 압축을 위한 기본 압축 방법으로 LZO를 사용합니다.
References
- Arnaud Bouche (2008-01-01). "LZO fast compress/uncompress: implementation in 80386 machine code for Delphi". bouchez.info. LZO. Retrieved 2022-08-23. Do you know the LZO compression format?
- Tarreau, Willy (2014-07-19). "LZO stream format as understood by Linux's LZO decompressor". infradead.org. Infra Dead. Retrieved 2022-08-23. This document describes what input format the LZO decompressor as implemented in the Linux kernel understands.
- Reimar Döffinger. "libavutil/lzo.c". FFmpeg.
- David Woodhouse (January 26, 2015). "Add LZO decompression support". OpenConnect.
External links
- LZO/LZOP Fanpage at the Wayback Machine (archived June 25, 2012)
- lzo-java on GitHub - Pure Java implementation of the liblzo2 LZO compression algorithm