Deflate(通常按早期电脑编程习惯写为DEFLATE)是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。它最初是由美国程序员菲尔·卡茨(Phil Katz)为他的PKZIP软件第二版所定义的,后来被RFC 1951标准化[1]。
菲尔·卡茨及其所拥有的PKWARE, Inc为该算法申请了美国专利5051745号[2]。人们普遍认为DEFLATE不受任何专利所覆盖,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了应用在ZIP文件格式中,也使用于gzip压缩文件以及PNG图像文件中。
DEFLATE压缩与解压的原始码可以在自由、通用的压缩函数库zlib上找到。
7-zip实现了更高压缩比的DEFLATE,AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。
流格式
Deflate流是指位元流。也即,我们首先把它看作字节流,然后对每个字节,确定其位元顺序。对于X86这样的小端序平台,就是按照字节内部最不显著位元(Least Significant Bit) 到最显著位元(Most Significant Bit)的顺序。例如,对于字节0x15,它的位元序列是10101000。
Deflate流包含一系列数据块。每块以3位元的头部开始:
- 第1位元: Last-block-in-stream marker:
1
: 流的最后一块0
: 不是流的最后一块
- 第2、第3位元: 编码方法
00
: 无压缩的stored/raw/literal, 长度在0至65,535字节01
: 静态霍夫曼压缩。采用事先定义(因而无须存储在流中)的霍夫曼树10
: 动态霍夫曼树11
: 保留,未使用
编程接口
Deflate可以免费在很多编程语言中使用。C语言通常使用zlib函数库。C++语言可以使用7-Zip/AdvanceCOMP。Java语言包含在标准函数库java.util.zip中。Microsoft .NET Framework 2.0包含在System.IO.Compression命名空间中。
参见
参考文献
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.