zlib是提供
資料壓縮之用的
函式庫,初版0.9版在
1995年5月1日發表。
zlib使用抽象化的DEFLATE演算法,普遍為許多軟體所使用,而DEFLATE 壓縮與解壓的原始碼可以在自由且通用的 zlib函式庫 上找到。(註1)
官網:http://zlib.net/
zlib功能介紹
1. Header
zlib的header能使用gzip、zlib或者不使用header來壓縮數據。
一般情況下,數據壓縮使用zlib,因為可提供錯誤數據檢測。
當數據不使用數據頭寫入時,結果是沒有任何錯誤檢測的原始DEFLATE數據。
2. Algorithm
目前zlib僅支援一種演算法,即DEFLATE的演算法。
這個演算法使用很少的系統資源,對各種數據提供很好的壓縮效果。
儘管zip文件格式也支持幾種其他的演算法,但此種仍最常被使用。
3 . Resource use
函式庫提供了能夠使用或控制CPU和記憶體的能力。
不同的壓縮級別數值可以指示不同的壓縮執行速度。
還有
記憶體控制管理的功能,這在像嵌入式系統這樣記憶體有限制的環境中是相當有用的。
4 . Strategy
壓縮可以針對特定類型的數據進行優化,若使用者總是使用 zlib 壓縮特定類型的資料,可以使用針對性的策略來提高壓縮效率和性能。
例如,如果使用者的資料包含很多的重複性質,那麼可以用RLE(運行長度編碼)策略,可能會有更好的結果。
(註2)
5 . Error handling
錯誤可以被發現和跳過,資料的錯誤可以被偵測到 (只要資料和zlib或者gzip數據頭一起被寫入)。
如果全刷新點(full-flush
points)被寫入到壓縮後的資料流中,那麼錯誤數據是可以被跳過的,並且解壓縮將重新同步到下個全刷新點,但是建立太多的全刷新點會極大的影響速度和壓縮。
6 . Data length
對於壓縮和解壓縮,
沒有數據長度的限制。
重複調用函式庫允許處理無限的資料流,一些數值可能產生overflow,但是不影響實際的壓縮和解壓縮。
當壓縮一個相當長的資料時,最好寫入全刷新點。
●註1:Deflate是一種結合了 LZ77
演算法和霍夫曼(Huffman)編碼的無耗損資料壓縮演算法。它最初是由 Phil Katz 為了他的 PKZIP 壓縮工具版本2所研發的,後來也被定義在 RFC
1951 規格文件裡。一般認為 Deflate 是不受專利限制的,而且在 LZW 相關專利失效之前(使用在GIF檔案格式),除了 Katz 原先設計用在 ZIP
檔案格式之外,它也已經應用在 gzip 壓縮檔和 PNG 影像檔上。
●註2: RLE 是 Run Length Encoding (遊程長度編碼) 的縮寫,它是一種無損失演算法,該演算法在特定類型的數據料壓縮上有著驚人的壓縮比。
它將檔案中一序列重複相同的數據取代為一個計數和單一數據;假設使用 RLE 壓縮下列字串資料(17 個位元組):ABBBBBBBBBCDEEEEF
利用 RLE 壓縮後,被壓縮的檔案只佔用 10 位元組:A *8B C D *4E F
此演算法很容易製作,也不需要大量的 CPU 馬力,RLE 僅對有需多連續重複資料的檔案有效,例如:含有大量白色或黑色的區域單色影像圖、電腦生成的很多同色區塊的彩色圖像(如建築繪圖紙)都可以獲得不錯的壓縮比。
來源:
1. 維基百科 http://en.wikipedia.org/wiki/Zlib
2. http://kikicocopapaya.pixnet.net/blog/post/25119800-deflate
3. http://www.netprint101.com/text/43373744-416.html