GZIP文件格式简介

转载 2007年09月14日 17:22:00
GZIP文件格式简介

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

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

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

+---+---+---+---+---+---+---+---+---+---+========//========+===========//==========+---+---+---+---+---+---+---+---+
|ID1|ID2| CM|FLG| MTIME |XFL| OS| 额外的头字段 | 压缩的数据 | CRC32 | ISIZE |
+---+---+---+---+---+---+---+---+---+---+========//========+===========//==========+---+---+---+---+---+---+---+---+

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文件 gzip-1.3.3.tar.gz 格式的简要分析示意图:

GZIP文件格式示意图

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

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

[相关资源]

GZIP官方网站:www.gzip.org RFC 1950 - ZLIB Compressed Data Format Specification version 3.3 RFC 1951 - DEFLATE Compressed Data Format Specification version 1.3 RFC 1952 - GZIP file format specification version 4.3 科脑工作室(Kernel Studio):www.kernelstudio.com
 

1、GZIP压缩格式简介

转载自:http://blog.chinaunix.net/uid-618047-id-2085225.html 1、GZIP压缩格式简介      在JDK API中,同样定义了多种类...
  • rengq126
  • rengq126
  • 2013年03月11日 14:57
  • 4407

GZIP压缩原理分析(04)——第三章 gzip文件格式详解(三02) gzip文件头

文件头由固定长度的部分和扩展部分组成,扩展部分不一定存在,尤其是网络传输使用的HTTP压缩,如果使用了gzip格式,那么对应的压缩报文一般都不带扩展部分。gzip文件格式通过将头部中定长部分的某些比特...
  • jison_r_wang
  • jison_r_wang
  • 2016年07月30日 10:02
  • 3782

Java 读写GZIP格式文件

最近的工作中需要用到GZIP压缩文本
  • FX_SKY
  • FX_SKY
  • 2014年11月12日 13:44
  • 1853

GZIP文件格式简介

由于最近用到了gzip格式相关的东西,所以网上找找可用的资料。 本文转帖自:http://blog.chinaunix.net/u/22878/showart_374215.html   GZI...
  • zhoudahuifbi
  • zhoudahuifbi
  • 2014年10月24日 15:18
  • 362

GZIP, ZLIB, DEFLATE, 文件格式 --zz

GZIP, ZLIB, DEFLATE, 文件格式 转自:http://apps.hi.baidu.com/share/detail/19276079 2009-12-07 19:29 ...
  • mergerly
  • mergerly
  • 2011年09月22日 14:09
  • 820

DXF文件格式的详细分析及读取方法简介

  • 2009年12月16日 13:43
  • 126KB
  • 下载

FAT16文件格式简介

  • 2011年12月06日 23:29
  • 1.41MB
  • 下载

Office_(2007)_Open_XML_文件格式简介

  • 2016年07月16日 00:02
  • 306KB
  • 下载

基于Hive 的文件格式:RCFile 简介及其应用

目录[-] 1、hadoop 文件格式简介 (1)SequenceFile (2)RCFile (3)Avro (4)文本格式 (5)外部格式 2、为什么需要 RCFile 3、RCFile 简介...
  • jiangshouzhuang
  • jiangshouzhuang
  • 2015年06月28日 23:02
  • 906

各种烧写文件格式简介-ELF Hex Bin

各种烧写文件格式简介-ELF Hex Bin 一,ELF Executable and linking format(ELF)文件是x86 Linux系统 下的一种常用目标文件(obj...
  • hpu1011
  • hpu1011
  • 2012年04月15日 02:01
  • 1084
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GZIP文件格式简介
举报原因:
原因补充:

(最多只允许输入30个字)