![]() ![]() |
|
GZIP文件格式简介 | |
作者:未知 文章来源:网络 点击数2647 更新时间:2011-03-02 11:40:53 文章录入:admin 责任编辑:admin | |
|
|
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。 GZIP本身只是一种文件格式,其内部通常采用DEFLATE数据格式,而DEFLATE采用LZ77压缩算法来压缩数据。 GZIP文件由1到多个“块”组成,实际上通常只有1块。每个块包含头、数据和尾三部分。块的概貌如下: +---+---+---+---+---+---+---+---+ 1. 头部分bit 0 FTEXT - 指示文本数据 0 - FAT文件系统 (MS-DOS, OS/2, NT/Win32) (若 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 | 数据 | +......+......+......+=============//============+ 各种情形的处理过程,请参考后面列出的RFC文档。 3. 尾部分GZIP中字节排列顺序是LSB方式,即Little-Endian,与ZLIB中的相反。 GZIP与ZLIB有着很深的渊源。有关ZLIB, GZIP以及DEFLATE等更加详细的说明,可参考RFC 1950-1952。从这些文档里也能找到其它的参考文献。 GZIP已成为GNU Project的一个组成部分,其官方站点为www.gzip.org。在这里可以下载到GZIP源码。目前最新版本是1.2.4,以及beta版的1.3.3。 [相关资源] |
|
![]() ![]() |