C++ 語言寫成的的 LZMA 開放源碼壓縮庫使用了區間編碼支持的 LZ77 改進壓縮算法以及特殊的用於二進制的預處理程序。
數據流、重復序列大小以及重續序列位置單獨進行了壓縮。
LZMA 支持幾種散列鏈變體、二叉樹以及基數樹作為它的字典查找算法基礎。
BCJ / BCJ2
BCJ / BCJ2 壓縮工具所附帶的 LZMA SDK 包括:在 X86、ARM、PowerPC、IA-64 以及 ARM Thumb 處理器上在壓縮之前跳轉目標進行歸壹化處理。對於 x86 平臺來說,這是壹個近跳轉、近調用以及近條件跳轉需要從“向後跳 1665 字節”這樣的機器語言歸壹化到“跳轉到 5554”這樣的格式,但是短跳轉及短條件跳轉不需要進行這樣的處理。
7-Zip
盡管 7-Zip BCJ2 使用 32 位的偏移地址,但是 UPX 這樣的可執行文件壓縮工具當檢測到 16 位 DOS 二進制文件格式的時候仍然可以使用 16 位的數值。RAR 壓縮工具對 32 位的 x86 可執行文件以及 IA64 Itanium 可執行文件進行偏移地址壓縮。
BCJ / BCJ2 二進制文件壓縮
BCJ 與 BCJ2 之間的區別在於前者只將近跳轉及近調用目標地址轉換到歸壹化的形式,而 BCJ2 只將 x86 平臺下的近跳轉、近調用及條件近跳轉目標分別進行壓縮。
7-Zip 實現
在GNU LGPL通用公***許可證下發布的7-zip中使用的LZMA有以下幾個特點:
* 高壓縮比;
* 解壓縮程式碼較小:約 5 KB;
* 解壓縮時僅需少量內存 (取決於字典大小);
* 可變更字典大小 (最大 4 GB);
* 壓縮速度:在壹部2GHz的處理器上運行,約可達到1MB每秒的速度;
* 解壓縮速度:在壹部2GHz的處理器上運行,約可達10-20MB每秒的速度;
* 支援多線程、多核心(多處理器)和Pentium 4處理器的超線程(Hyper-Threading);
這個特點使得這個這個算法的解壓過程非常適合於嵌入式系統應用的場合。
可移植性
壹些微軟Windows專有的特性深深嵌入在源程序中,這樣就很難生成壹個與 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 and SquashFS, with applied patches
* lrzip ("long range zip", or "LZMA rzip")
* PyLZMA,Igor Pavlov 的 LZMA SDK 的 Python 語言接口
* FreeArc, 歸檔工具及 LZMA SDK 的 Haskell 語言接口
* 用於 Pascal 語言的 LZMA SDK