Skip to main content

5. 字典格式 (Dictionary Format)

Zstandard与"原始内容"字典兼容,不受任何格式限制,只是它们必须至少为8字节。这些字典的功能就像它们只是格式化字典的内容部分一样。

但是,参考实现中由"zstd --train"创建的字典遵循此处描述的特定格式。

字典不包含在压缩内容中,而是带外提供。也就是说,Dictionary_ID标识应使用哪个字典,但本规范不描述在压缩或解压期间使用之前获取字典的机制。

字典有大小,由缓冲区限制或文件大小定义。一般格式为:

+==============+===============+================+=========+
| Magic_Number | Dictionary_ID | Entropy_Tables | Content |
+==============+===============+================+=========+

Magic_Number: 4字节ID,值0xEC30A437,小端格式。

Dictionary_ID: 4字节,以小端格式存储。Dictionary_ID可以是除0之外的任何值(0表示没有Dictionary_ID)。它由解码器用于检查它们是否使用正确的字典。

Entropy_Tables: 遵循与压缩块中的表相同的格式。它们按以下顺序存储:字面量的Huffman表、偏移量的FSE表、匹配长度的FSE表和字面量长度的FSE表。这些表填充重复统计字面量模式和序列解码的重复分布模式。最后是3个偏移量值,填充重复偏移量(而不是使用{1,4,8}),按顺序存储,每个4字节小端,总共12字节。每个重复偏移量必须小于字典大小。

Content: 字典的其余部分是其内容。内容充当要压缩或解压的数据前面的"过去",因此可以在序列命令中引用。只要从此帧解码的数据量小于或等于Window_Size,序列命令就可以指定比到目前为止解码输出的总长度更长的偏移量,以引用回字典,甚至是偏移量大于Window_Size的字典部分。