我有一些文件,有一些随机字节和多个 gzip 文件。如何在某个文件中找到 gzip 流的开始和结束?gzip 流之间有许多随机字节。所以,基本上我需要找到任何 gzip 文件并从那里获取它。
问问题
8882 次
2 回答
11
每个 GZIP 文件只是一堆数据块(称为成员),每个文件包含一个数据块。
每个成员都以以下字节开头:
- 0x1F (ID1)
- 0x8B (ID2)
- 压缩方法。0x08用于
DEFLATE
d 文件。0-7 是保留值。 - 标志。前三位是保留的,必须为零。
- (4 字节) 最后修改时间。可以设置为 0。
- 额外的标志,由压缩方法定义。
- 操作系统,实际上是文件系统。0=FAT,3=UNIX,11=NTFS
成员的结尾没有分隔。您必须实际步行整个成员。请注意,连接多个有效的 GZIP 文件会创建一个有效的 GZIP 文件。另请注意,超出成员可能仍会导致成功读取成员(除非解压缩库完全失败)。
于 2012-10-28T20:54:45.533 回答
5
搜索一个三字节的 gzip 签名,0x1f 0x8b 0x08。找到后,尝试解码以 0x1f 开头的 gzip 流。如果你成功了,那就是一个 gzip 流,它在它结束的地方结束。如果它是 1,则从该 gzip 流之后继续搜索,如果不是,则从 0x08 之后继续搜索。然后你会找到它们,你会知道它们的位置和跨度。
于 2012-10-28T20:59:07.300 回答