Skip to main content

3.1.1.4. Sequence Execution (序列执行)

一旦字面量和序列都已解码,它们将被组合以生成块的解码内容。

每个序列由一个元组 (literals_length, offset_value, match_length) 组成,如 Sequences_Section(第 3.1.1.3.2 节)中所述进行解码。要执行序列,首先从解码的字面量复制 literals_length 字节到输出。

然后,从先前解码的数据复制 match_length 字节。要从中复制的偏移量由 offset_value 确定:

  • if Offset_Value > 3: 则偏移量为 Offset_Value - 3;

  • if Offset_Value is from 1-3: 偏移量是一个特殊的重复偏移值。有关如何在这种情况下确定偏移量的信息,请参见第 3.1.1.5 节。

偏移量是从当前位置(复制字面量后)定义的,因此偏移量为 6 且匹配长度为 3 意味着应该从 6 个字节之前复制 3 个字节。请注意,所有导致先前解码数据的偏移量必须小于 Frame_Header_Descriptor(第 3.1.1.1.1 节)中定义的 Window_Size。


执行流程示例

示例 1: 基本序列执行

假设序列为 (literals_length=5, offset_value=10, match_length=4):

  1. 复制字面量: 从字面量段复制 5 个字节到输出
  2. 计算偏移量: Offset_Value=10 > 3,所以 Offset = 10 - 3 = 7
  3. 复制匹配: 从输出位置向后 7 个字节处复制 4 个字节

示例 2: 使用重复偏移量

假设序列为 (literals_length=3, offset_value=1, match_length=8):

  1. 复制字面量: 从字面量段复制 3 个字节到输出
  2. 使用重复偏移: offset_value=1 表示使用 Repeated_Offset1
  3. 复制匹配: 从 Repeated_Offset1 位置复制 8 个字节

重要约束

  1. Window_Size 限制: 所有偏移量必须 < Window_Size
  2. 数据完整性: 必须确保偏移量不超出已解码数据范围
  3. 字面量耗尽: 所有序列执行后,剩余字面量追加到输出末尾