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 | 磁盘总数 |
zip相关知识梳理(一)的更多相关文章
- PMBOK项目管理相关知识梳理
该次梳理,依据PMBOK(第五版),罗列项目管理十三章节重要的知识点. 一.引论1.项目的定义与举例:2.项目.项目组合.项目集与项目组织管理:3.范进本质是风资(范围.进度.成本.质量.风险.资源) ...
- Android多媒体开发-stagefright及AwesomePlayer相关知识梳理
android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( c ...
- SSM相关知识梳理面试
- Java String类相关知识梳理(含字符串常量池(String Pool)知识)
目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...
- Linux实战教学笔记19:Linux相关网络知识梳理
第十九节 Linux相关网络知识梳理 标签(空格分隔): Linux实战教学笔记-陈思齐 一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工 ...
- 一张思维导图带你梳理HashMap相关知识
HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- solr DIH 知识梳理
solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...
- AJAX跨域调用相关知识-CORS和JSONP(引)
AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...
随机推荐
- 51Nod 1967 路径定向 —— 欧拉回路
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 显然是欧拉回路问题,度数为奇数的点之间连边,跑欧拉回路就可以 ...
- SPI操作flash MX25L64读写数据
STM32F10X SPI操作flash MX25L64读写数据 简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信.ARM主控芯片STM32F103,flash芯片 ...
- 【高德地图API】地理编码与逆地理编码
一.地理编码 该功能实现地理编码服务,即地址匹配,从已知的地址描述到对应的经纬度坐标的转换,即根据地址信息,查询该地址所对应的点坐标等,地址(address) 为必选项,城市(city)为可选项. & ...
- 课后题--------求分子量-----Molar mass------
简单的化学式 求分子量问题 下面附上 代码和解析. #include<stdio.h> #include<algorithm> #include<string.h&g ...
- [51nod]1678 lyk与gcd(莫比乌斯反演)
题面 传送门 题解 和这题差不多 //minamoto #include<bits/stdc++.h> #define R register #define pb push_back #d ...
- 洛谷2019 3月月赛 T4
T3做不来.. 直接滚去T4 orz 乍一看 T4是个DP 题干 复杂度??(N^4) 咋优化... 还带一只捆绑 捆绑啥的最烦人了 最后20pts 直接废了 T了 很烦 不过拿到80pts已经很开心 ...
- Linux环境下修改MySQL数据库对表名大小写不敏感
Linux系统中MySQL对数据库名称和表名是大小写敏感的,这就导致了一些麻烦,虽然已经建立了表和数据,但因为大小写导致无法找到表. MySQL数据库对表名大小写不敏感的设置方法如下: 1.查看MyS ...
- [转]深入ASP.NET MVC之二:路由模块如何工作
本文转自:http://www.cnblogs.com/yinzixin/archive/2012/11/05/2754483.html 摘要: 上文分析了UrlRouting模块何时会被触发,本文重 ...
- Java使用 POI 操作Excel
Java中常见的用来操作 Excel 的方式有2种:JXL和POI.JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本.而POI是Apache 的开源项目,由Java编写的 ...
- 【雅虎2017】一个在线展示广告的CVR预估框架实践
论文A Practical Framework of Conversion Rate Prediction for Online Display Advertising 定期更新,获取更多,欢迎sta ...