GZIP文件格式简介
来源:互联网 发布:电脑笔顺输入法软件 编辑:程序博客网 时间:2024/05/29 17:37
由于最近用到了gzip格式相关的东西,所以网上找找可用的资料。
本文转帖自:http://blog.chinaunix.net/u/22878/showart_374215.html
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. 头部分
bit 0 FTEXT - 指示文本数据
bit 1 FHCRC - 指示存在CRC16头校验字段
bit 2 FEXTRA - 指示存在可选项字段
bit 3 FNAME - 指示存在原文件名字段
bit 4 FCOMMENT - 指示存在注释字段
bit 5-7 保留
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 | 数据 |+......+......+......+=============//============+
各种情形的处理过程,请参考后面列出的RFC文档。
3. 尾部分
GZIP中字节排列顺序是LSB方式,即Little-Endian,与ZLIB中的相反。
下面是GZIP文件 gzip-1.3.3.tar.gz 格式的简要分析示意图:
GZIP与ZLIB有着很深的渊源。有关ZLIB, GZIP以及DEFLATE等更加详细的说明,可参考RFC 1950-1952。从这些文档里也能找到其它的参考文献。
GZIP已成为GNU Project的一个组成部分,其官方站点为www.gzip.org。在这里可以下载到GZIP源码。目前最新版本是1.2.4,以及beta版的1.3.3。
[相关资源]
- GZIP文件格式简介
- GZIP文件格式简介
- GZIP文件格式简介
- GZIP文件格式简介
- GZIP文件格式简介
- GZIP, ZLIB, DEFLATE, 文件格式
- gzip文件格式解析
- GZIP, ZLIB, DEFLATE, 文件格式 --zz
- (转)gzip文件格式详解
- MD2文件格式简介
- LINUX文件格式简介
- OpenDocument文件格式简介
- avi文件格式简介
- HDR文件格式简介
- BMP文件格式简介(转载)
- PCM文件格式简介
- 图片文件格式简介
- plist文件格式简介
- Mac OS升级到Yosemite后一些问题
- 创业必须的一些网站和博客导航
- MongoDB 安装
- Extern用法
- (八)洞悉linux下的Netfilter&iptables:状态防火墙
- GZIP文件格式简介
- Win64 安装Oracle11g和32位PLSQL客户端
- vimdiff常用命令
- ie678,FF,chrome的css兼容性
- 人脸扫描(一)-将录像转换成UIImage
- set
- (九)洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT
- LeetCode:Unique Binary Search Trees
- 获取硬盘序列号