找到gzip的开始和结束?

时间:2012-10-28 20:14:22

标签: file gzip archive

我有一些文件,有一些随机字节和多个gzip文件。如何在某个文件中找到gzip流的开始和结束? gzip流之间有很多随机字节。所以,基本上我需要找到任何gzip文件并从那里获取它。

2 个答案:

答案 0 :(得分:8)

阅读RFC 1952 - GZIP

每个GZIP文件只是一堆数据块(称为成员),每个文件包含一个。

每个成员都以以下字节开头:

  • 0x1F(ID1)
  • 0x8B(ID2)
  • 压缩方法。 0x08 表示DEFLATE个文件。 0-7是保留值。
  • 标志。 前三位保留,必须为零
  • (4个字节)上次修改时间。可以设置为0。
  • 额外标志,由压缩方法定义。
  • 操作系统,实际上是文件系统。 0 = FAT,3 = UNIX,11 = NTFS

成员的结尾未分隔。你必须实际走完整个会员。请注意,连接多个有效的GZIP文件会创建有效的GZIP文件。另请注意,超过成员可能仍然会导致成员的成功阅读(除非解压缩库失败并且非常彻底)。

答案 1 :(得分:2)

搜索三字节gzip签名,0x1f 0x8b 0x08。当你找到它时,尝试解码从0x1f开始的gzip流。如果你成功了,那就是一个gzip流,它结束了它的结束。如果是gzip流,则继续搜索gzip流,如果不是,则继续搜索0x08。然后你会发现所有这些,你会知道它们的位置和跨度。