ZIP包的格式是一种二进制格式,它由一系列字节组成,每个字节都有特定的含义。下面是ZIP包格式中常见的字节和它们的含义:
-
文件头标识符(Local File Header):标识文件的开始。
- 字节1-4: 0x50 0x4B 0x03 0x04(固定值)
- 字节5-6: 压缩方法(例如,0x08 表示使用 DEFLATE 压缩)
- 字节7-8: 一些标志位,如是否加密、是否有数据描述符等
- 字节9-10: 压缩时间
- 字节11-12: 压缩日期
- 字节13-16: CRC32 校验和
- 字节17-20: 压缩后的文件大小
- 字节21-24: 解压缩后的文件大小
- 字节25-26: 文件名长度
- 字节27-28: 扩展字段长度
- 字节29-x: 文件名
- 字节x+1-x+y: 扩展字段(可选)
- 字节x+y+1-末尾: 压缩数据
-
数据描述符(Data Descriptor):提供文件的一些信息,如 CRC32 校验和、压缩后的文件大小和解压缩后的文件大小。
- 字节1-4: 0x50 0x4B 0x07 0x08(固定值)
- 字节5-8: CRC32 校验和
- 字节9-12: 压缩后的文件大小
- 字节13-16: 解压缩后的文件大小
-
中央目录文件头(Central Directory File Header):包含每个文件的信息,用于存储整个 ZIP 包的目录结构。
- 字节1-4: 0x50 0x4B 0x01 0x02(固定值)
- 字节5-6: 版本号
- 字节7-8: 版本需要的最低版本
- 字节9-10: 通用标志位
- 字节11-12: 压缩方法
- 字节13-14: 压缩时间
- 字节15-16: 压缩日期
- 字节17-20: CRC32 校验和
- 字节21-24: 压缩后的文件大小
- 字节25-28: 解压缩后的文件大小
- 字节29-30: 文件名长度
- 字节31-32: 扩展字段长度
- 字节33-34: 注释长度
- 字节35-36: 磁盘编号开始
- 字节37-38: 内部文件属性
- 字节39-42: 外部文件属性
- 字节43-46: 文件头相对位移
Local File Header(文件头标识符)是ZIP包中的一个重要部分,它包含了文件的基本信息和文件数据。下面是Local File Header的详细解释:
-
字节1-4: 标识符(Signature)
- 固定值:0x50 0x4B 0x03 0x04
-
字节5-6: 压缩方法(Compression Method)
- 指定文件的压缩方法,常见的压缩方法包括:
- 0x00:无压缩
- 0x08:DEFLATE 压缩方法(最常用的压缩方法)
- 指定文件的压缩方法,常见的压缩方法包括:
-
字节7-8: 通用标志位(General Purpose Bit Flag)
- 指定了一些标志位的值,用于标识文件的特性,比如是否加密、是否有数据描述符等。
-
字节9-10: 压缩时间(Compression Time)
- 压缩时间的值由两个字节表示,以DOS格式存储。
-
字节11-12: 压缩日期(Compression Date)
- 压缩日期的值由两个字节表示,以DOS格式存储。
-
字节13-16: CRC32 校验和(CRC32 Checksum)
- 用于校验文件内容的完整性,采用CRC32算法计算得出。
-
字节17-20: 压缩后的文件大小(Compressed Size)
- 文件在压缩后的大小,以字节为单位。
-
字节21-24: 解压缩后的文件大小(Uncompressed Size)
- 文件在解压缩后的大小,以字节为单位。
-
字节25-26: 文件名长度(File Name Length)
- 文件名的长度,以字节为单位。
-
字节27-28: 扩展字段长度(Extra Field Length)
- 扩展字段的长度,以字节为单位。
-
字节29-x: 文件名(File Name)
- 文件的名称,以字符串形式表示。
-
字节x+1-x+y: 扩展字段(Extra Field)
- 可选的扩展字段,用于存储额外的文件信息。
-
字节x+y+1-末尾: 压缩数据(Compressed Data)
- 文件的压缩数据,即实际的文件内容。
Local File Header定义了ZIP包中每个文件的起始位置和文件的基本信息,包括压缩方法、时间戳、文件大小等。这些信息使得ZIP包能够存储和还原文件,并支持文件的压缩和解压缩操作。
网友评论