LZMA

维基百科,自由的百科全书
跳转至: 导航搜索

LZMALempel-Ziv-Markov chain-Algorithm的缩写)是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式。它使用类似于LZ77字典编码机制,在一般的情況下壓縮率比bzip2為高,用於壓縮的字典檔案大小可達4GB。

概述[编辑]

C++语言写成的LZMA开放源码压缩库使用了区间编码支持的LZ77改进压缩算法以及特殊的用于二进制的预处理程序。

数据流、重复序列大小以及重续序列位置单独进行了压缩。

LZMA支持几种散列链变体、二叉树以及基数树作为它的字典查找算法基础。

BCJ / BCJ2二进制文件压缩[编辑]

BCJ / BCJ2压缩工具所附带的LZMA SDK包括:在X86ARMPowerPCIA-64以及ARM Thumb处理器上在压缩之前跳转目标进行归一化处理。对于x86平台来说,这是一个近跳转、近调用以及近条件跳转需要从“向后跳1665字节”这样的机器语言归一化到“跳转到5554”这样的格式,但是短跳转及短条件跳转不需要进行这样的处理。

BCJ与BCJ2之间的区别在于前者只将近跳转及近调用目标地址转换到归一化的形式,而BCJ2只将x86平台下的近跳转、近调用及条件近跳转目标分别进行压缩。

7-Zip实现[编辑]

GNU通用公共許可證下發佈的7-zip參考版本有以下幾個特點:

  • 高壓縮比
  • 解壓縮程式碼較小:約5 KB
  • 解壓縮時僅需少量記憶體(取決於字典大小)
  • 解壓縮速度:在一部2GHz的處理器上運行,約可達10-20MB每秒的速度。
  • 支援多執行緒、多核心和Pentium 4處理器的超執行緒

这个特点使得这个这个算法的解压过程非常适合于嵌入式系统应用的场合。

可移植性[编辑]

一些Windows作業系統专有的特性深深嵌入在源程序中,这样就很难生成一个与Unix兼容的版本。但是,已经有两个移植到类Unix平台的版本:

  • p7zip是一个或多或少地完全将7z及7za移植到POSIX的7-zip 版本,这些系统包括LinuxSolarisOpenBSDFreeBSDCygwin等Unix系统以及Mac OS XBeOS等。
  • LZMA Unix Port是一个只移植了LZMA中代码的版本,它是一个类似于gzip的基于数据流的压缩工具。它不是一个归档工具,而只是一个普通的压缩工具,并且由于它在没有数据头中没有未压缩文件大小的UInt64变量,所以它与7-zip生成的LZMA数据流中不同。7-zip使用一种更加灵活的归档格式7z,因此二者都不能互相使用对方生成的数据,至少在目前是这样。
  • xz, LZMA Unix Port 的替代品,提供更好的压缩。

应用[编辑]

使用或者支持LZMA的软件有:

外部链接[编辑]