由于最近用到了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. 头部分

  • 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与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

GZIP文件格式简介相关推荐

  1. yaml 文件格式简介

    from: http://www.cnblogs.com/phpgo/p/6480107.html .yaml 文件格式简介 命名 YAML 的意思其实是:"Yet Another Mark ...

  2. AVI文件格式简介与WAV文件分析

    AVI文件格式简介与WAV文件分析 AVI文件格式(回答问题) 所有AVI文件至少包含2个必须的LIST Chunk和一个索引Chunk Chunk: LIST Chunk: 小端:数据的低位保存在内 ...

  3. gzip文件格式解析

    参考:http://www.onicos.com/staff/iz/formats/gzip.html (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) ...

  4. linux gzip 命令简介

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...

  5. 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper

    目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法&demo yaml demo toml properties HOCON plist(pli ...

  6. M3U8 文件格式简介

    HLS协议 HLS是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件. 工作原理:整个流分成一个个小的基于 HTTP 的ts格式文件 ...

  7. GERBER文件格式简介

    GERBER文件是一种国际标准的光绘格式文件,它包含RS-274-D和RS-274-X两种格式,其中RS-274-D称为基本GERBER格式,并要同时附带D码文件才能完整描述一张图形;RS-274-X ...

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

    转载地址:http://blog.chinaunix.net/uid-20321537-id-1966794.html 一,ELF Executable and linking format(ELF) ...

  9. ELF文件格式简介 --- 见过最细致的ELF讲解

    ELF代表Executable and Linkable Forma,是一种对可执行文件.目标文件和库使用的文件格式,跟Windows下的PE文件格式类似.ELF格式是是UNIX系统实验室作为ABI( ...

最新文章

  1. linux复盘:mysql基础
  2. php mysql隔离_mysql隔离级别有几种
  3. 【设计模式系列】行为型模式之Mediator模式
  4. 关于结构化伪类的案例
  5. 20181031-1
  6. Mysql命令行改动字段类型
  7. java jdk的作用_Java JDK环境配置及配置作用说明
  8. UE 基础环境安装与Bridge插件配置
  9. UML-----构件图与部署图
  10. 关于metasploit的一些架构目录
  11. 华为商业级AC6005+AP3030DN无线WIFI组网
  12. Endnote x7.5 破解 注册 激活
  13. 官宣:两校合并,落户省会!
  14. 【组图】韩国美女明星蔡研---精彩写真
  15. C语言打印某一年的全部日历(两行日历形式)
  16. 无线充qi2来了,快来了解下~
  17. c语言编程华容道,C/C++仿华容道小游戏
  18. python文件怎么另存为_python+pywin32处理另存为弹出框保存文件
  19. RFID相关的两个标准协议接口 PC/SC 和 CCID
  20. hdu 1845(最大匹配)

热门文章

  1. torchnet.meter使用教程
  2. Java语言brea使用方法
  3. netcore ajax上传,.netCore WebApi传输参变化
  4. Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
  5. 查看kafka的topic清单以及topic的内容
  6. Lua 打印table、ngx.say table
  7. Vue - 解析富文本(v-html 指令)
  8. 漫威迷福利:新加坡杜莎夫人蜡像馆漫威4D体验馆
  9. 福利!福利!!!弄懂这些java面试题,面试官对你刮目相看!(该面试题带有答案)
  10. c语言弹力球小游戏,超级弹力球