1. 程式人生 > >幾款壓縮庫介紹

幾款壓縮庫介紹

 

LZ4

LZ4能很好的支援多執行緒環境,獲得更高的壓縮和解壓速度。

 

QuickLZ

QuickLZ官網:http://www.quicklz.com/

QuickLZ is the world's fastest compression library, reaching 308MB/s per core.

QuickLZ自稱是世界上最快的壓縮演算法,然而我們看到它和LZ4還是有差距的,特別是解壓速度。

 

snappy

snappy專案:https://code.google.com/p/snappy/

snappy is developed by Google based on ideas from LZ77 and open-sourced in 2011.

It was designed to be very fast and stable, but not to achieve a high compression ratio.

Compression speed is 250MB/s and decompression speed is 500MB/s using a single threaded,

64-bit core i7 processor. The compression ratio is 20-100% lower than gzip.

snappy追求的是速度,壓縮比並不高。

 

 

zip

    zlib庫,可通過包含zlib.h使用。

    zip原名為Deflate,僅支援一個LZ77的變種演算法Deflate。

    zip/unzip,字尾為.zip。zip也是Windows下常見的壓縮格式。

 gzip

    gzip/gunzip是GNU程式,字尾為.gz。Web也常用GZIP壓縮技術。

    首先使用LZ77演算法進行壓縮,對結果再使用huffman編碼進行壓縮。

    tar中用-z來呼叫:

         tar -czf pic.tar.gz *.jpg

         tar -xzf pic.tar.gz

bzip2

    bzip2/bunzip2,字尾為.bz2。

    相比於gzip,壓縮比更高,壓縮效果比傳統的LZ77/LZ78更好,但壓縮速度較慢。

    首先使用Burrows-Wheeler變換(BWT,塊排序文字壓縮),然後使用哈夫曼編碼進行壓縮。

    tar中使用-j來呼叫:

        tar -cjf pic.tar.bz2 *.jpg

        tar -xjf pic.tar.bz2

compress

    compress/uncompress,字尾為.Z,現在已經不再流行了。

    使用LZ78演算法的變種LZW。

    tar中使用-Z來呼叫。

rar

    rar/unrar,字尾為.rar。

    rar格式較zip格式的壓縮比高。

    注意RAR非免費,是Windows下常見壓縮格式,也有RAR for Linux。

        rar a pic *.jpg // pic.rar

        rar e pic.rar // pic

7z

    7-Zip,字尾為.7z。

    和rar、zip一樣,7z也是Windows下常見的壓縮格式。

    使用改良與優化後的LZ77演算法LZMA、LZMA2,壓縮比高於zip。

xz

    xz,字尾為.xz。

    如果說LZ4是壓縮速度之王,xz則是壓縮比之王。

    一般來說,用xz壓縮後的檔案,能比用gzip壓縮的小30%,比用bzip2壓縮的小15%。

    主要使用LZMA2壓縮演算法。

    tar不支援xz格式,xz / xz -d。

 

測試

Quick comparison: single thread, Core i5-3340M @2.7GHz, using the Open-Source Benchmark by m^2 (v0.14.2)

compiled with GCC v4.6.1 on Linux Ubuntu 64-bits v11.10, using the Silesia Corpus.

對比當前流行的壓縮工具,可以看到LZ4具有最快的壓縮和解壓速度,儘管壓縮比一般。

 

 

總結

1.snappy 從各個方面是相對均衡的壓縮演算法,使用場景比較多

2.lz4 是瞭解到各方面都比較優越的演算法,

3.當然還有其他的 lzo,gz,zlib 等等,相比上面兩種來說要差一些,當然特殊場景下可以擇優選取,但是通用場景選 snappy 或者 lz4 是比較不錯的。