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 磁盘总数

zip相关知识梳理(一)的更多相关文章

  1. PMBOK项目管理相关知识梳理

    该次梳理,依据PMBOK(第五版),罗列项目管理十三章节重要的知识点. 一.引论1.项目的定义与举例:2.项目.项目组合.项目集与项目组织管理:3.范进本质是风资(范围.进度.成本.质量.风险.资源) ...

  2. Android多媒体开发-stagefright及AwesomePlayer相关知识梳理

    android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( c ...

  3. SSM相关知识梳理面试

  4. Java String类相关知识梳理(含字符串常量池(String Pool)知识)

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  5. Linux实战教学笔记19:Linux相关网络知识梳理

    第十九节 Linux相关网络知识梳理 标签(空格分隔): Linux实战教学笔记-陈思齐 一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工 ...

  6. 一张思维导图带你梳理HashMap相关知识

    HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...

  7. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  8. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  9. AJAX跨域调用相关知识-CORS和JSONP(引)

    AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...

随机推荐

  1. iOS开发——高级篇——iOS 项目的目录结构

    最近闲来无事去面试一下iOS开发,让我感到吃惊的,面试官竟然问怎么分目录结构,还具体问每个子目录的文件名. 目录结构确实非常重要,面试官这么问,无疑是想窥探开发经验.清晰的目录结构,可让人一眼明白相应 ...

  2. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip 树形压位DP

      题目链接:http://codeforces.com/contest/766/problem/E Examples input 3 1 2 3 1 2 2 3 out 10 题意: 给你一棵n个点 ...

  3. bootrap 手风琴Collapse源码分析

    /* ======================================================================== * Bootstrap: collapse.js ...

  4. hibernate 下载

    https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/ http://sourceforge.net/p ...

  5. mysqldump 导出数据表,和数据

    目录 导出数据库表与数据 导出数据表数据 导出多个表数据 只导出数据 只导出创建表的数据 导出数据库表与数据 mysqldump -uroot -p caomall>tmp.sql 导出数据表数 ...

  6. 【Silverlight】Bing Maps学习系列(六):使用扩展模式(Extended Modes)(转)

    [Silverlight]Bing Maps学习系列(六):使用扩展模式(Extended Modes) 微软Bing Maps推出有有段时间了,通过不断的改进和新的地图更新,现在已经基本上形成了一套 ...

  7. Java IO 输入输出流 详解 (一)***

    首先看个图: 这是Javaio 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Seri ...

  8. 多条件查询测试用例设计方法(1)—Pairwise(转)

    在我的工作中,我也遇到类似需求.正交法是一种不错的选择,而在我们实践过程中,我们还用了Pairwise方法,以及另一种方法(如下): 假设查询因子:A,B,C,D,E 1.单独查询:A:B:C:D:E ...

  9. 小记 react 数据存储位置

    react 中状态的六个存储位置 state 我想大家都知道这个地方,而且在使用 setState 时会触发组件的更新 class prop 将值存在 class 的对象中,如: class App ...

  10. 启动VMware环境下的Linux操作系统,添加新分区

    启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份. 3.1 [fdisk -l] 最大分区为/dev/sda3,说明新创建的分区将会是sda4 3.2 输入[fdisk / ...