23. 印刷格物致知
          23.6. 壓縮演算法
 23.6.4. Flate/Deflate 壓縮

Deflate 是一種無損失壓縮演算法,它架構於兩個其他壓縮算法:霍夫曼編碼 (Huffman encoding) 和 LZ77 壓縮;所以得先了解這兩種演算法如何工作,才會了解 Deflate  壓縮演算法。

Flate 如何工作

Flate 壓縮是一種聰明的演算法,它根據實際資料的內容調整壓縮資料的方式,壓縮器包含有三種壓縮模式:

  1. 完全不壓縮:譬如對於已經被壓縮過的資料,這是一個很聰明的選擇,以此模式儲存的資料會有些許變大, 但長大幅度遠不如使用其他兩種壓縮方式來處理已被壓縮過的資料時變大的幅度。
  2. 先用 LZ77 然後使用略加修改的 Huffman 編碼的壓縮,此壓縮模式下根據 Deflate 標準規範建構分析各個字元出現的頻率的樹狀資料結構,所以不需額外的儲存空間存放樹狀資料結構。  
  3. 先用 LZ77 然後使用略加修改的 Huffman 編碼的壓縮,這種壓縮的資料包含樹狀資料結構。

要被壓縮的資料會被分割成許多小『塊』(blocks),每個區塊使用單一模式的壓縮,分別使用上述的三種壓縮模式之一。

Deflate 在 Phil Katz 開發的共享軟體 PKZIP Version 2 出現,後來定義於 RFC 1951 規範,Deflate 演算法的壓縮與解壓縮的原始碼可以在http://zlib.net/上免費取得;著名的 ZIP 檔案格式的前身原名就是 Deflate,ZIP 檔案格式是一種相當流行的資料壓縮和文檔儲存的檔案格式(ZIP 內也有應用到其他壓縮法,但使用 Deflate 是最常被用到的)。

Flate/deflate 壓縮使用在哪裡?

  • Adobe Acrobat 應用程式使用了 flate 壓縮,Flate 壓縮是 PDF 檔案格式內的標準壓縮之一
  • 7-zip, ZIP, WinRAR, gzip 與 zlib 都使用 deflate 演算法
  • 網頁伺服機在網站通訊上 deflate 也扮演一個角色,它們通常使用 deflate (有時是 gzip) 壓縮網頁後傳送

Idea associations
Table of contents