gz文件Header 解析
来源:互联网 发布:加工中心铣圆编程 编辑:程序博客网 时间:2024/05/21 17:08
GZ (*.gz)是Unix系统下一种很常用的压缩文件格式(windows下也可用)。本文主要说明一下gz文件header部分的内存布局。
注释图形说明
+--- +
| | <-- 每个这种格子代表一个字节(byte)
+ ---+
+==============+
| | <-- 这种格子代表多个字节
+==============+
1.gz header的最基本结构如下
+ ---+ --- + ---- +-----+---+---+---+---+----+ ---- +
| ID1| ID2| CM | FLG| MTIME |XFL| OS | (more-->)
+--- + --- + ---- + ---- +---+---+---+---+----+ ---- +
2. 格式说明
ID1 和 ID2
为gzip格式标志,为固定值 ID1 = 31(0x1f, \037); ID2 = 139(0x8b, \213)
CM (压缩方法)
0-7bit为保留位,8 = deflate
FLAG
这个字节被分为8个bit
bit 0 FTEXT 此文件可能为ASCII码文件,但大多情况下都不设置此bit
bit 1 FHCRC 在gzip[1.2.4]之前从不设置此bit
bit 2 FEXTRA 表示在gz header基本结构基础上加入其他信息
bit 3 FNAME 加入文件名字,文件名以'\0'结尾
bit 4 FCOMMENT 加入其他说明,以'\0'结尾
bit 5 reserved 此 bit 保留
bit 6 reserved 此 bit 保留
bit 7 reserved 此 bit 保留
MTIME
指示最近修改时间(格式为Unix时间戳),表示距离1970年1月1日 00:00:00 GMT所经历的秒数(SEC)。
XFL
当设置了CM=8后,此bit可用,指代压缩方法。XFL = 2 : 最大压缩率,速度最慢的算法; XFL = 4 : 最快的压缩算法。
OS
指示操作系统
0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
1 - Amiga
2 - VMS (or OpenVMS)
3 - Unix
4 - VM/CMS
5 - Atari TOS
6 - HPFS filesystem (OS/2, NT)
7 - Macintosh
8 - Z-System
9 - CP/M
10 - TOPS-20
11 - NTFS filesystem (NT)
12 - QDOS
13 - Acorn RISCOS
255 - unknow
3. Extra Field
如果设置了FLAG.FEXTRA,则在基本结构后会增加如下结构
XLNE: 额外数据的字节长度(byte)
+---+---+=================================+
| XLEN | ...XLEN bytes of "extra field"... | (more-->)
+---+---+=================================+
XLEN后面的子field也有特定的格式,其格式如下:
+----+----+----+----+==========================+
|SI1 | SI2| LEN |... LEN bytes of subfield data ... |
+----+----+----+----+==========================+
SI1 和 SI2 为子field的标志, LEN为子field的数据长度(byte)
SI1 SI2 LEN Data
---------- ---------- ---- ----------------------------
0x41 ('A') 0x70 ('P') 29 Apollo file type information
REF: http://www.zlib.org/rfc-gzip.html
- gz文件Header 解析
- Discuz! X3 header.htm 文件解析
- swf文件解析(一) 文件header部分解析
- Discuz!X模板代码解析--Header(头文件)
- Java解析魔兽争霸3录像W3G文件(一):Header
- tar.gz文件
- linux解压 .gz 文件
- 解压.tar.gz文件
- 安装tar.gz文件
- 解压.tar.gz文件
- 解压*.tar.gz文件
- 解压cpio.gz文件
- 解压cpio.gz文件
- linux 解压gz文件
- 如何解压.gz文件
- .cpio.gz文件解压
- 加密tar.gz文件
- java解压gz文件
- scrollview刷新界面导致下沉64个point的问题
- java 继承和多态
- 哪几种情况可以销毁session(一般有3种)
- 机器学习教程之-近邻法
- linux脚本中echo打印信息时的单引号和双引号的区别
- gz文件Header 解析
- 2016 Pacific Northwest Region Programming Contest—Division 2 Problem S — limit 1 second Gravity
- 历史上最详细的SpringBoot多数据源配置及使用流程
- WILL吃桃_KEY
- CSS学习笔记-3
- 剑指offer 复杂链表的复制
- 170720 逆向-misc-cctf(1)
- 吾爱破解160个crackme之002
- android调用H5显示加载中效果