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 Number | Field Name |
|---|---|
| 7-6 | Literal_Lengths_Mode |
| 5-4 | Offsets_Mode |
| 3-2 | Match_Lengths_Mode |
| 1-0 | Reserved |
Compression_Mode的枚举:
| Value | Compression_Mode |
|---|---|
| 0 | Predefined_Mode |
| 1 | RLE_Mode |
| 2 | FSE_Compressed_Mode |
| 3 | Repeat_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。