【发布时间】:2012-10-18 05:38:08
【问题描述】:
我有一些文件,有一些随机字节和多个 gzip 文件。如何在某个文件中找到 gzip 流的开始和结束? gzip 流之间有很多随机字节。所以,基本上我需要找到任何 gzip 文件并从那里获取它。
【问题讨论】:
-
您是前段时间问如何解压缩 .exe 文件的同一个人吗? :-)
-
@JohnDvorak 你获得了最相关的评论奖杯。
我有一些文件,有一些随机字节和多个 gzip 文件。如何在某个文件中找到 gzip 流的开始和结束? gzip 流之间有很多随机字节。所以,基本上我需要找到任何 gzip 文件并从那里获取它。
【问题讨论】:
阅读自RFC 1952 - GZIP :
每个 GZIP 文件只是一堆数据块(称为成员),每个包含一个文件。
每个成员都以以下字节开头:
DEFLATEd 文件。 0-7 是保留值。成员的结尾没有分隔符。您必须实际步行整个成员。请注意,连接多个有效的 GZIP 文件会创建一个有效的 GZIP 文件。另请注意,超出成员可能仍会导致成功读取成员(除非解压缩库完全失败)。
【讨论】:
搜索一个三字节的 gzip 签名,0x1f 0x8b 0x08。找到后,尝试解码以 0x1f 开头的 gzip 流。如果你成功了,那就是一个 gzip 流,它在它结束的地方结束。如果它是 1,则从该 gzip 流之后继续搜索,如果不是,则从 0x08 之后继续搜索。然后你会找到它们,你就会知道它们的位置和跨度。
【讨论】: