找到gzip的开始和结束?

Fed*_*omp 6 gzip file archive

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

Joh*_*rak 8

阅读RFC 1952 - GZIP:

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

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

  • 0x1F(ID1)
  • 0x8B(ID2)
  • 压缩方法.d文件为0x08DEFLATE.0-7是保留值.
  • 标志.该顶部三个位是保留的,必须是零.
  • (4个字节)最后修改时间.可以设置为0.
  • 额外标志,由压缩方法定义.
  • 操作系统,实际上是文件系统.0 = FAT,3 = UNIX,11 = NTFS

成员的结尾不是分隔的.你必须实际走完整个会员.请注意,连接多个有效的GZIP文件会创建有效的GZIP文件.还要注意,超过成员仍可能导致成员的成功读取(除非解压缩库失败 - 急切地 - 完全).


Mar*_*ler 5

搜索三字节 gzip 签名 0x1f 0x8b 0x08。找到它后,尝试解码以 0x1f 开头的 gzip 流。如果你成功了,那么这就是一个 gzip 流,它就在它结束的地方结束。如果该 gzip 流是 1,则从该 gzip 流之后继续搜索;如果不是,则从 0x08 之后继续搜索。然后你就会找到所有这些,你就会知道它们的位置和跨度。