GZIP,DEFLATE文件格式

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GZIP, ZLIB, DEFLATE, 文件格式

GZIP, ZLIB, DEFLATE, 文件格式

2009-12-07 19:29

GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB 站点常常使用GZIP压缩技术来让用户感受更快的速度。

GZIP本身只是一种文件格式,其内部通常采用DEFLATE数据格式,而DEFLATE 采用LZ77压缩算法来压缩数据。

GZIP文件由1到多个“块”组成,实际上通常只有1块。每个块包含头、数据和尾三部分。块的概貌如下:

1. 头部分

∙ ID1与ID2:各1字节。固定值,ID1 = 31 (0x1F),ID2 = 139(0x8B),指示GZIP格式。

∙ CM:1字节。压缩方法。目前只有一种:CM = 8,指示DEFLATE方法。

∙ FLG:1字节。标志。

bit 0 FTEXT - 指示文本数据

bit 1 FHCRC - 指示存在CRC16头校验字段

bit 2 FEXTRA - 指示存在可选项字段

bit 3 FNAME - 指示存在原文件名字段

bit 4 FCOMMENT - 指示存在注释字段

bit 5-7 保留

∙ MTIME:4字节。更改时间。UINX格式。

∙ XFL:1字节。附加的标志。当CM = 8时,XFL = 2 - 最大压缩但最慢的算法;XFL = 4 - 最快但最小压缩的算法

∙ OS:1字节。操作系统,确切地说应该是文件系统。有下列定义:

0 - FAT文件系统 (MS-DOS, OS/2, NT/Win32)

1 - Amiga

2 - VMS/OpenVMS

3 - Unix

4 - VM/CMS

5 - Atari TOS

6 - HPFS文件系统 (OS/2, NT)

7 - Macintosh

8 - Z-System

9 - CP/M

10 - TOPS-20

11 - NTFS文件系统 (NT)

12 - QDOS

13 - Acorn RISCOS

255 - 未知

额外的头字段:

(若 FLG.FEXTRA = 1)

+---+---+---+---+===============//================+

|SI1|SI2| XLEN | 长度为XLEN字节的可选项 |

+---+---+---+---+===============//================+

(若 FLG.FNAME = 1)

+=======================//========================+

| 原文件名(以NULL结尾) |

+=======================//========================+

(若 FLG.FCOMMENT = 1)

+=======================//========================+

| 注释文字(只能使用iso-8859-1字符,以NULL结尾) |

+=======================//========================+

(若 FLG.FHCRC = 1)

+---+---+

| CRC16 |

+---+---+

存在额外的可选项时,SI1与SI2指示可选项ID,XLEN指示可选项字节数。如 SI1 = 0x41 ('A'),SI2 = 0x70 ('P'),表示可选项是Apollo文件格式的额外数据。

2. 数据部分

DEFLATE数据格式,包含一系列子数据块。子块概貌如下:

+......+......+......+=============//============+

|BFINAL| BTYPE | 数据 |

+......+......+......+=============//============+

∙ BFINAL:1比特。0 - 还有后续子块;1 - 该子块是最后一块。

∙ BTYPE:2比特。00 - 不压缩;01 - 静态Huffman编码压缩;10 - 动态Huffman 编码压缩;11 - 保留。

各种情形的处理过程,请参考后面列出的RFC文档。

3. 尾部分

∙ CRC32:4字节。原始(未压缩)数据的32位校验和。

∙ ISIZE:4字节。原始(未压缩)数据的长度的低32位。

GZIP中字节排列顺序是LSB方式,即Little-Endian,与ZLIB中的相反。

GZIP与ZLIB有着很深的渊源。有关ZLIB, GZIP以及DEFLATE等更加详细的说明,可参考RFC 1950-1952。从这些文档里也能找到其它的参考文献。

GZIP已成为GNU Project的一个组成部分,其官方站点为。在这里可以下载到GZIP源码。目前最新版本是1.2.4,以及beta版的1.3.3。

相关文档
最新文档