【问题标题】:Find gzip start and end?查找 gzip 的开始和结束?
【发布时间】:2012-10-18 05:38:08
【问题描述】:

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

【问题讨论】:

  • 您是前段时间问如何解压缩 .exe 文件的同一个人吗? :-)
  • @JohnDvorak 你获得了最相关的评论奖杯。

标签: file gzip archive


【解决方案1】:

阅读自RFC 1952 - GZIP

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

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

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

成员的结尾没有分隔符。您必须实际步行整个成员。请注意,连接多个有效的 GZIP 文件会创建一个有效的 GZIP 文件。另请注意,超出成员可能仍会导致成功读取成员(除非解压缩库完全失败)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2023-03-30
      • 2020-02-17
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多