存在哪些 GZip 额外字段子字段?

问题描述 投票:0回答:3

RFC 1952(GZIP 文件格式规范第 2.3.1.1 节内容如下:

2.3.1.1. Extra field

   If the FLG.FEXTRA bit is set, an "extra field" is present in
   the header, with total length XLEN bytes.  It consists of a
   series of subfields, each of the form:

      +---+---+---+---+==================================+
      |SI1|SI2|  LEN  |... LEN bytes of subfield data ...|
      +---+---+---+---+==================================+

   SI1 and SI2 provide a subfield ID, typically two ASCII letters
   with some mnemonic value.  Jean-Loup Gailly
   <email@hidden> is maintaining a registry of subfield
   IDs; please send him any subfield ID you wish to use.  Subfield
   IDs with SI2 = 0 are reserved for future use.  The following
   IDs are currently defined:

      SI1         SI2         Data
      ----------  ----------  ----
      0x41 ('A')  0x70 ('P')  Apollo file type information

   LEN gives the length of the subfield data, excluding the 4
   initial bytes.

除了 RFC 中给出的

AP
之外,是否还存在任何子字段类型?网络搜索找不到列表; GZip 的维基百科页面、GNU 主页、gzip 源代码或 Stack Overflow 上都没有提及。

gzip file-format
3个回答
5
投票

据我所知,没有维护这样的注册表。 Jean-loup 不再适用于 gzip。


2
投票

这里还有一个正在使用的子字段:

BGZF 格式(符合 gzip)是为生物信息学而开发的,使用子字段类型“BC”来指示当前块的大小。这用于使并行解压变得容易。

来自 http://samtools.github.io/hts-specs/SAMv1.pdf 的规范:

每个 BGZF 块都包含一个标准 gzip 文件头,具有以下符合标准的扩展名:

  1. 标头中的 F.EXTRA 位设置为指示存在额外字段。
  2. BGZF 使用的额外字段使用两个子字段 ID 值 66 和 67(ASCII ‘BC’)。
  3. BGZF额外字段有效负载(gzip规范中的字段LEN)的长度为2(两个字节 有效负载)。
  4. BGZF额外字段的有效负载是小端格式的16位无符号整数。这个整数 给出包含 BGZF 块的大小减一。

0
投票

要记住两件事:

a) 某些 gzip 库甚至可能不会公开子字段。悲伤但真实。

b) 如果使用任何子字段,则生产应用程序可能与消费应用程序保持一致。因此,除非生成的 gzip 以某种方式暴露给意外的消费者,否则任意选择的子字段 ID 干扰消费应用程序行为的机会非常小(假设 62 个区分大小写的 alphanum ascii 中有 2 个字符,即 3844 个字符中的 1 个)。您不太可能在仅用于压缩的通用 gzip 流上看到任何子字段。

因此,如果您的目标是使用未注册 ID 的有目的的子字段来压缩我自己的文件,我会非常有信心。

© www.soinside.com 2019 - 2024. All rights reserved.