zip相关知识梳理(一)

zip相关知识梳理(一)

经过对zip文件的长时间研究,对zip文件进行相关知识进行梳理,虽然网上很多牛人对其做了相关基础解析,但是对于特殊情况没有进行说明,比如超过4G的zip文件该以什么格式进行编译,现本人对其进行详细讲解。如有不足,欢迎各位大神指点!

一、zip文件格式

zip文件格式:
[本地文件头1]
[文件数据1]
[数据描述符1]
    .
    .
    .
[本地文件头n]
[文件数据n]
[数据描述符n]
[存档解密标题](EFS)
[存档额外数据记录](EFS)
[核心目录]
[zip64中心目录记录结束]
[中央目录定位器的zip64端] 
[中央目录记录结束]

因此压缩源文件数据区包括三个部分:[本地文件头] + [档案数据] + [数据描述符]

1.本地头文件

用于标识该文件的开始,记录了该压缩文件的信息。

OffsetBytesdescription
04文件头标识,固定值(0x04034b50)
42解压文件所需的pkware最低版本
62通用比特标志位
82压缩方式
102文件最后修改时间
122文件最后修改日期
144CRC-32校验码
184压缩后的大小
224未压缩的大小
262文件名长度
282扩展区长度
30n文件名
30+nm扩展区

其中通用标志位具体参数获取如下:

Bytesdescription
0如果设置,表示文件已加密
2 1

0 0 正常压缩方式

0 1 最大压缩方式

1 0 快速压缩方式

1 1 最快压缩方式

3如果设置此位,CRC-32与未压缩大小在头文件中设为0,正常值放到数据描述符中
4位方法8保留,为了增强压缩
5如果置位,表示该文件为压缩的补充数据
6如果置位,则提取值所需的版本设置为至少 50,并需要结合位0,提取值所需的版本必须 至少为51
7目前未使用
8目前未使用
9目前未使用
10目前未使用
11目前未使用
12由PKWARE保留以增强压缩
13在加密中央目录时使用,以指示本地标题中的选定数据值被屏蔽以隐藏其实际值
14由PKWARE保留
15由PKWARE保留

2.文件数据

记录压缩后文件的数据

3.数据描述符

用于标识该文件压缩结束,该结构只有在相应的local file header中通用标记字段的第3bit设为1时才会出现,紧接在压缩文件源数据后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。

OffsetBytesdescription
04CRC-32校验码
44压缩后的大小
84未压缩的大小

4.核心目录

录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。

OffsetBytesdescription
04核心目录标识,固定值(0x02014b50)
42解压文件所需的pkware最低版本
62解压所需pkware版本
82通用位标志
102压缩方法
122文件最后修改时间
142文件最后修改日期
164CRC-32校验码
204压缩后的大小
244未压缩的大小
282文件名长度
302扩展域长度
322文件注释长度
342文件开始位置的磁盘编码
362内部文件属性
384外部文件属性
424本地文件头的相对位移
46n目录文件名
46+nm扩展域
46+n+mk文件注释内容

5.目录结束标识

目录结束标识存在于整个归档包的结尾,用于标记压缩的目录数据的结束。每个压缩文件必须有且只有一个EOCD记录。

OffsetBytesdescription
04核心目录结束标记(0x06054b50)
42当前磁盘编码
62核心目录开始位置的磁盘编号
82该磁盘上所记录的核心目录数量
102核心目录结构总数
124核心目录的大小
164核心目录开始位置相对于archive开始的位移
202注释长度
22n注释内容

6.zip64核心目录结束记录符(4G以上zip文件会用到)

OffsetBytesdescription
04zip64核心目录结束标志,固定值(0x06064b50)
48核心目录的大小
122版本标识
142版本
164磁盘编码
204核心目录的开始的磁盘编码
248zip中压缩文件的数目
328zip中整个文件的数目
408核心目录的总条数
488核心目录相对于磁盘开始的偏移

7.zip64核心目录定位结束符(4G以上zip文件会用到)

OffsetBytesdescription
04zip64核心目录定位结束符标志位,固定值(0x07064b50)
44核心目录开始的磁盘编号
88核心目录末端的相对偏移
164磁盘总数

转载于:https://www.cnblogs.com/yuanchenghao/p/10090228.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值