LZMA
维基百科,自由的百科全书
LZMA,(Lempel-Ziv-Markov chain-Algorithm的缩写),是 2001年以来得到发展的一个数据压缩算法,它用于 7-Zip 归档工具中的 7z 格式。它使用类似于 LZ77 的字典编码机制,在一般的情況下壓縮率比 bzip2 為高,用於壓縮的字典檔大小可達4GB。
目录 |
[编辑] 概述
C++ 语言写成的的 LZMA 开放源码压缩库使用了区间编码支持的 LZ77 改进压缩算法以及特殊的用于二进制的预处理程序。
数据流、重复序列大小以及重续序列位置单独进行了压缩。
LZMA 支持几种散列链变体、二叉树以及基数树作为它的字典查找算法基础。
[编辑] BCJ / BCJ2 二进制文件压缩
BCJ / BCJ2 压缩工具所附带的 LZMA SDK 包括:在 X86、ARM、PowerPC、IA-64 以及 ARM Thumb 处理器上在压缩之前跳转目标进行归一化处理。对于 x86 平台来说,这是一个近跳转、近调用以及近条件跳转需要从“向后跳 1665 字节”这样的机器语言归一化到“跳转到 5554”这样的格式,但是短跳转及短条件跳转不需要进行这样的处理。
尽管 7-Zip BCJ2 使用 32 位的偏移地址,但是 UPX 这样的可执行文件压缩工具当检测到 16 位 DOS 二进制文件格式的时候仍然可以使用 16 位的数值。RAR 压缩工具对 32 位的 x86 可执行文件以及 IA64 Itanium 可执行文件进行偏移地址压缩。
BCJ 与 BCJ2 之间的区别在于前者只将近跳转及近调用目标地址转换到归一化的形式,而 BCJ2 只将 x86 平台下的近跳转、近调用及条件近跳转目标分别进行压缩。
[编辑] 7-Zip 实现
在GNU通用公共許可證下發佈的7-zip參考版本有以下幾個特點:
- 高壓縮比
- 解壓縮程式碼較小:約 5 KB
- 解壓縮時僅需少量記憶體 (取決於字典大小)
- 可變更字典大小 (最大 4 GB)
- 壓縮速度:在一部2GHz的處理器上運行,約可達到1MB每秒的速度。
- 解壓縮速度:在一部2GHz的處理器上運行,約可達10-20MB每秒的速度。
- 支援多執行緒、多核心和Pentium 4處理器的超執行緒。
这个特点使得这个这个算法的解压过程非常适合于嵌入式系统应用的场合。
[编辑] 可移植性
一些微软视窗专有的特性深深嵌入在源程序中,这样就很难生成一个与 Unix 兼容的版本。但是,已经有两个移植到类 Unix 平台的版本:
- p7zip 是一个或多或少地完全将 7z 及 7za 移植到 POSIX 的 7-zip 版本,这些系统包括 Linux、Solaris、OpenBSD、FreeBSD、Cygwin 等 Unix 系统以及 Mac OS X 和 BeOS等。
- LZMA Unix Port 是一个只移植了 LZMA 中代码的版本,它是一个类似于 gzip 的基于数据流的压缩工具。它不是一个归档工具,而只是一个普通的压缩工具,并且由于它在没有数据头中没有未压缩文件大小的 UInt64 变量,所以它与 7-zip 生成的 LZMA 数据流中不同。7-zip 使用一种更加灵活的归档格式 7z,因此二者都不能互相使用对方生成的数据,至少在目前是这样。
[编辑] 应用
使用或者支持 LZMA 的软件有:
- Nullsoft Scriptable Install System
- Inno Setup
- cramfs和SquashFS,需要安裝補丁。
- lrzip ("long range zip", or "LZMA rzip")
- PyLZMA,Igor Pavlov 的 LZMA SDK 的 Python 语言接口
- FreeArc, 归档工具及 LZMA SDK 的 Haskell 语言接口
- 用于 Pascal 语言的 LZMA SDK
[编辑] 外部链接
- 7-Zip Official Web-Site
- LZMA SDK
- p7zip Unix port of command-line utilities
- PyLZMA Python Wrapper
- Nullsoft Installer uses LZMA
- Inno Setup supports LZMA
- Compress home page
- LZMA support for cramfs filesystem (dead)
- LZMA utils
- FreeArc archiver and Haskell interface to the LZMA library
- at least one perl interface to LZMA library has been published
- Pascal port of the LZMA SDK
|
|||||||||
---|---|---|---|---|---|---|---|---|---|
无损数据压缩 |
|
||||||||
音频压缩 |
|
||||||||
图像压缩 |
|
||||||||
视频压缩 |
|