zip相关知识梳理(一)
程序员文章站
2022-06-04 22:56:41
zip相关知识梳理(一) 经过对zip文件的长时间研究,对zip文件进行相关知识进行梳理,虽然网上很多牛人对其做了相关基础解析,但是对于特殊情况没有进行说明,比如超过4G的zip文件该以什么格式进行编译,现本人对其进行详细讲解。如有不足,欢迎各位大神指点! 一、zip文件格式 zip文件格式: [本 ......
zip相关知识梳理(一)
经过对zip文件的长时间研究,对zip文件进行相关知识进行梳理,虽然网上很多牛人对其做了相关基础解析,但是对于特殊情况没有进行说明,比如超过4g的zip文件该以什么格式进行编译,现本人对其进行详细讲解。如有不足,欢迎各位大神指点!
一、zip文件格式
zip文件格式: [本地文件头1] [文件数据1] [数据描述符1] . . . [本地文件头n] [文件数据n] [数据描述符n] [存档解密标题](efs) [存档额外数据记录](efs) [核心目录] [zip64中心目录记录结束] [*目录定位器的zip64端] [*目录记录结束]
因此压缩源文件数据区包括三个部分:[本地文件头] + [档案数据] + [数据描述符]
1.本地头文件
用于标识该文件的开始,记录了该压缩文件的信息。
offset | bytes | description |
0 | 4 | 文件头标识,固定值(0x04034b50) |
4 | 2 | 解压文件所需的pkware最低版本 |
6 | 2 | 通用比特标志位 |
8 | 2 | 压缩方式 |
10 | 2 | 文件最后修改时间 |
12 | 2 | 文件最后修改日期 |
14 | 4 | crc-32校验码 |
18 | 4 | 压缩后的大小 |
22 | 4 | 未压缩的大小 |
26 | 2 | 文件名长度 |
28 | 2 | 扩展区长度 |
30 | n | 文件名 |
30+n | m | 扩展区 |
其中通用标志位具体参数获取如下:
bytes | description |
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 文件进行检索时使用。
offset | bytes | description |
0 | 4 | crc-32校验码 |
4 | 4 | 压缩后的大小 |
8 | 4 | 未压缩的大小 |
4.核心目录
录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。
offset | bytes | description |
0 | 4 | 核心目录标识,固定值(0x02014b50) |
4 | 2 | 解压文件所需的pkware最低版本 |
6 | 2 | 解压所需pkware版本 |
8 | 2 | 通用位标志 |
10 | 2 | 压缩方法 |
12 | 2 | 文件最后修改时间 |
14 | 2 | 文件最后修改日期 |
16 | 4 | crc-32校验码 |
20 | 4 | 压缩后的大小 |
24 | 4 | 未压缩的大小 |
28 | 2 | 文件名长度 |
30 | 2 | 扩展域长度 |
32 | 2 | 文件注释长度 |
34 | 2 | 文件开始位置的磁盘编码 |
36 | 2 | 内部文件属性 |
38 | 4 | 外部文件属性 |
42 | 4 | 本地文件头的相对位移 |
46 | n | 目录文件名 |
46+n | m | 扩展域 |
46+n+m | k | 文件注释内容 |
5.目录结束标识
目录结束标识存在于整个归档包的结尾,用于标记压缩的目录数据的结束。每个压缩文件必须有且只有一个eocd记录。
offset | bytes | description |
0 | 4 | 核心目录结束标记(0x06054b50) |
4 | 2 | 当前磁盘编码 |
6 | 2 | 核心目录开始位置的磁盘编号 |
8 | 2 | 该磁盘上所记录的核心目录数量 |
10 | 2 | 核心目录结构总数 |
12 | 4 | 核心目录的大小 |
16 | 4 | 核心目录开始位置相对于archive开始的位移 |
20 | 2 | 注释长度 |
22 | n | 注释内容 |
6.zip64核心目录结束记录符(4g以上zip文件会用到)
offset | bytes | description |
0 | 4 | zip64核心目录结束标志,固定值(0x06064b50) |
4 | 8 | 核心目录的大小 |
12 | 2 | 版本标识 |
14 | 2 | 版本 |
16 | 4 | 磁盘编码 |
20 | 4 | 核心目录的开始的磁盘编码 |
24 | 8 | zip中压缩文件的数目 |
32 | 8 | zip中整个文件的数目 |
40 | 8 | 核心目录的总条数 |
48 | 8 | 核心目录相对于磁盘开始的偏移 |
7.zip64核心目录定位结束符(4g以上zip文件会用到)
offset | bytes | description |
0 | 4 | zip64核心目录定位结束符标志位,固定值(0x07064b50) |
4 | 4 | 核心目录开始的磁盘编号 |
8 | 8 | 核心目录末端的相对偏移 |
16 | 4 | 磁盘总数 |
上一篇: Windows 组策略的生效规则
下一篇: thinkphp5 rbac权限
推荐阅读
-
zip相关知识梳理(一)
-
Java String类相关知识梳理(含字符串常量池(String Pool)知识)
-
JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
-
苹果削皮切块可以保存多久,削皮是多此一举吗,给你介绍苹果的相关知识
-
小景谷的茶是不是普洱茶,小景谷茶叶的相关小知识您一定要知道
-
一些Linux Shell中的权限相关知识总结
-
谈恋爱的一些相关知识
-
关于冷战思维的一些相关知识
-
牛奶和豆腐脑可以一起吃吗,小编为你讲解相关知识
-
SQL Server 与MySQL中排序规则与字符集相关知识的一点总结