Skip to main content

3.1.1.3.2. 序列部分 (Sequences Section)

Sequences_Section_Header (序列部分头)

此头部由两个项目组成:

  • Number_of_Sequences(序列数)
  • Symbol_Compression_Modes(符号压缩模式)

Number_of_Sequences是可变大小字段,使用1到3个字节。如果第一个字节是"byte0":

  • 如果 (byte0 == 0):没有序列
  • 如果 (byte0 < 128):Number_of_Sequences = byte0,使用1字节
  • 如果 (byte0 < 255):Number_of_Sequences = ((byte0 - 128) << 8) + byte1,使用2字节
  • 如果 (byte0 == 255):Number_of_Sequences = byte1 + (byte2 << 8) + 0x7F00,使用3字节

Symbol_Compression_Modes是单个字节,定义每种符号类型的压缩模式:

Bit NumberField Name
7-6Literal_Lengths_Mode
5-4Offsets_Mode
3-2Match_Lengths_Mode
1-0Reserved

Compression_Mode的枚举:

ValueCompression_Mode
0Predefined_Mode
1RLE_Mode
2FSE_Compressed_Mode
3Repeat_Mode

Predefined_Mode: 使用预定义的FSE分布表。

RLE_Mode: 表描述由单个字节组成,包含符号的值。此符号将用于所有序列。

FSE_Compressed_Mode: 标准FSE压缩。将存在分布表。

Repeat_Mode: 将再次使用在前一个Number_Of_Sequences > 0的Compressed_Block中使用的表,或者如果这是第一个块,则使用字典中的表。

序列代码 (Sequence Codes)

每个符号是其自己上下文中的代码,指定Baseline和Number_of_Bits。代码经FSE压缩,并与原始附加位在同一位流中交错。

字面量长度码范围从0到35,定义0到131071字节的长度。

匹配长度码范围从0到52,定义3到131074字节的长度。

偏移量码范围从0到N。解码器可以自由限制其支持的最大N值。建议至少支持22。