有關壓縮的一些東西

【zlib、gzip、zip的區別】

zlib是一種數據壓縮程序庫,它的設計目標是處理單純的數據(而不管數據的來源是什麼)。

gzip是一種文件壓縮工具(或該壓縮工具產生的壓縮文件格式),它的設計目標是處理單個的文件。gzip在壓縮文件中的數據時使用的就是zlib。爲了保存與文件屬性有關的信息,gzip需要在壓縮文件(*.gz)中保存更多的頭信息內容,而zlib不用考慮這一點。但gzip只適用於單個文件,所以我們在UNIX/Linux上經常看到的壓縮包後綴都是*.tar.gz或*.tgz,也就是先用tar把多個文件打包成單個文件,再用gzip壓縮的結果。

zip是適用於壓縮多個文件的格式(相應的工具有PkZip和WinZip等),因此,zip文件還要進一步包含文件目錄結構的信息,比gzip的頭信息更多。但需要注意,zip格式可採用多種壓縮算法,我們常見的zip文件大多不是用zlib的算法壓縮的,其壓縮數據的格式與gzip大不一樣。

Java SDK提供了對上述三種壓縮技術的支持:Inflater類和Deflater類直接用zlib庫對數據壓縮/解壓縮,GZIPInputStream類和GZIPOutputStream類提供了對gzip格式的支持,ZipFile、ZipInputStream、ZipOutputStream則用於處理zip格式的文件。

所以,你應當根據你的具體需求,選擇不同的壓縮技術:如果只需要壓縮/解壓縮數據,你可以直接用zlib實現,如果需要生成gzip格式的文件或解壓其他工具的壓縮結果,你就必須用gzip或zip等相關的類來處理了。

【DEFLATE】

DEFLATE 是同時使用了 LZ77 算法與哈夫曼編碼的一個無損數據壓縮算法。它最初是由 Phil Katz 爲他的 PKZIP 歸檔工具第二版所定義的,後來定義在 RFC1951 規範中。

人們普遍認爲 DEFLATE 不受任何專利所制約,並且在 LZW(GIF 文件格式使用)相關的專利失效之前,這種格式除了在ZIP文件格式中得到應用之外也在 gzip 壓縮文件以及 PNG 圖像文件中得到了應用。

DEFLATE 壓縮與解壓的源代碼可以在自由、通用的壓縮庫 zlib 上找到。

更高壓縮率的 DEFLATE 是 7-zip 所實現的。AdvanceCOMP 也使用這種實現,它可以對 gzip、PNG、MNG 以及 ZIP 文件進行壓縮從而得到比 zlib 更小的文件大小。在 Ken Silverman 的 KZIP 與 PNGOUT 中使用了一種更加高效同時要求更多用戶輸入的 DEFLATE 程序。

【INFLATE】

inflate是GZip, PNG等廣泛使用的解壓算法,linux也使用inflate對內核進行解壓.inflate的解壓算法使用的第3種快速解壓法的一個子集,它不考慮LONG_CODE,同時把SAME_LENGTH合併到MEDIUM_CODE。而對於規則的SAME_LENGTH編碼,比如length和distance編碼,inflate則使用額外的base和extra表示。這是因爲在構造一般的查找表時,雖然對於SAME_LENGTH前綴可以不構造副表,但我們需要另外一個表格來保存符號的順序,而這個表格的空間可能更大。但對於length和distance編碼,他們的順序是遞增的,所以無需額外的表格來保存符號的順序。

inflate使用root表示上述的b,查找表的數據結構爲code.主表和副同時保存在inflate_state結構中的大數組codes[ENOUGH]中.表的構造函數位於inftrees.c文件的inflate_table中.

【7z】

7z 是一種新的壓縮格式,它擁有目前最高的壓縮比。

7z 已公開了結構編輯功能,所以它可以支持任何一種新的壓縮算法。到目前爲止,下列壓縮算法已被整合到了 7z 中:

壓縮算法  備註 LZMA  LZ77 改良和優化算法後的最新版本 PPMD  基於 Dmitry Shkarin 之上的算法 PPMdH 並加以優化 BCJ  32-位 x86 可執行文件轉換程序 BCJ2  32-位 x86 可執行文件轉換程序 BZip2  標準 BWT 算法 Deflate  標準 LZ77-based 算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章