跳到主要内容

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的字典部分.