LZMA
A Wikipédiából, a szabad enciklopédiából.
Az LZMA (a Lempel-Ziv-Markov chain-Algorithm rövidítése) egy veszteségmentes tömörítési algoritmus, amit 2001 óta fejlesztenek, és a 7-Zip archiváló program 7z fájlformátuma használja. Az LZ77-hez hasonló szótár alapú kódolást használ, és igen jó tömörítési aránnyal rendelkezik (általában jobban tömörít, mint a bzip2). Változó méretű tömörítési szótárat tud használni, egészen 4 gigabájtig felfele. (Lásd még LZW.)
Tartalomjegyzék |
[szerkesztés] Áttekintés
A szabad forrású LZMA tömörítési programkönyvtár (ami C++-ban íródott) az LZ77 tömörítési algoritmus egy továbbfejlesztett változatát használja föl, ami kiegészül egy range coderrel és bináris fájlokhoz való előfeldolgozóval.
Az LZMA az adatfolyamokat, az ismétlési szekvenciák méretét és azok helyét külön-külön tömöríti. Hash-láncok különböző változatait használja, köztük bináris fákat és Patricia-fákat a szótárban való keresés algoritmusában.
[szerkesztés] BCJ / BCJ2 bináris fájltömörítés
Az LZMA SDK része a BCJ és BCJ2 binárisfájl-tömörítő. A kettő között a különbség az, hogy az előbbi csak a közeli (near) jump / call címeket normalizálja, a BCJ2 pedig tömöríti (x86-os CPU-n) a near jump, near call és a conditional near jump címeket is.
[szerkesztés] 7-Zip implementációk
A GNU LGPL licencű referencia-megvalósítás (lásd 7-Zip) a következő képességekkel bír:
- Tömörítési sebesség: kb. 1 MB/s egy 2 GHz-es CPU-n
- Kicsomagolás sebessége: 10-20 MB/s egy 2 GHz-es CPU-n
- Támogatja a multi-threadinget és a Pentium 4 mikroprocesszor hyper-threading képességét.
A LZMA kicsomagolásához szükséges kód mérete kb. 5 KB, és a kicsomagoláshoz dinamikusan lefoglalt memória mérete sem túl nagy (a szótármérettől függ). Az algoritmus kicsomagolás-része ezért beágyazott rendszerekben is alkalmazható.
A 7-Zip kódja erősen Windows-specifikus módon lett megírva, ezért nagyon nehéz Unix-kompatibilis változatot készíteni belőle. Ezzel együtt is létezik két működő portja Unix-szerű platformokra: a p7zip egy többé-kevésbé teljes portja a 7z és 7za parancssori 7-Zip verzióknak, POSIX rendszerekre, mint pl. Unix (Linux, Solaris, OpenBSD, FreeBSD, Cygwin), Mac OS X és BeOS. Az LZMA Unix Port kizárólag az LZMA kódrészletet tartalmazza, így egy gzip-szerű egyszerű adatfolyamtömörítő. Ez az eszköz tehát nem egy archiváló program, az általa létrehozott fájl nagyjából (de egy inkompatibilitás miatt nem teljesen) megegyezik a 7-Zip nyers LZMA streamjével. A 7-Zip egy flexibilisebb archív formátumot használ, a 7z-t, így a 7-Zip és az LZMA Unix Port egyelőre nem tudják olvasni egymás fájljait.
Létezik egy Mac OS X port is Compress néven (nincs köze az azonos nevű régi Unix parancshoz), de ez nem valami stabil. A Mac OS X-et használóknak rendelkezésére áll még a p7zip Fink csomag is, valamint a 7zX.
A PyLZMA Python Wrapper be- és kicsomagolást is végez Windows és Linux platformokon.
Egyes beágyazott router-dsl-wireless eszközök (mint az US Robotics 9105 és 9106]]) olyan módosított Linux-verziót futtatnak (a Broadcom által írt forráskód elérhető az USR weboldalán, ami egy olyan fájlrendszert használ, ami lényegében Cramfs (egy ISO 9660-szerű csak olvasható fájlrendszer), csak ZLIB helyett LZMA tömörítést használ. Egy elég vastag összekötő kódréteggel (glue) vették körbe a referencia kicsomagoló-kódot. Módosított cramfs eszközök érhetők el az ilyen LZMA Cramfs lemezképek kezelésére.
Az LZMA utils megpróbálja közelíteni a parancssori 7-Zip eszközöket a standard Unix viselkedéshez, az algoritmus elterjedését elősegítendő. Nagyjából ugyanazokat a parancssori kapcsolókat ismeri, mint a gzip és a bzip2. A fentebb említett LZMA Unix Port-tól eltérően, az LZMA utils a 7-Zip nyers LZMA-adatfolyamával megegyező fájlokat hoz létre.
A FreeArc egy másik archiváló program, ami az LZMA-t támogatja. A weboldalon megtalálható a szoftver forráskódja mellett az LZMA programkönyvtárhoz készített Haskell nyelvi interfész is.
A PECompact egy kereskedelmi (freeware szerzők számára ingyenes) EXE-tömörítő, ami az LZMA-t is támogatja. Az upack egy másik LZMA-t használó freeware EXE-tömörítő.
[szerkesztés] Külső hivatkozások
- A 7-Zip hivatalos weboldala
- LZMA SDK
- p7zip, a parancssori eszközök Unix portja
- PyLZMA Python Wrapper
- A Nullsoft Installer LZMA-t használ
- Az Inno Setup támogatja az LZMA-t
- A Compress weboldala
- LZMA-támogatás a cramfs fájlrendszerhez
- LZMA eszközök
- FreeArc archiver és Haskell interface az LZMA programkönyvtárhoz
- Legalább egy PERL interface is létezik az LZMA programkönyvtárhoz
- Az LZMA SDK Pascal portja