1个不稳定版本
0.0.1 | 2024年7月19日 |
---|
#9 在 #lz77
每月49次下载
46KB
1K SLoC
纯Rust实现的FastLZ。
lib.rs
:
这个crate是FastLZ的纯Rust实现。
这个crate使用与原始C代码相同的根本算法,即使用一个基于下一个三个字节作为键的哈希表来尝试查找回引用。就像FastLZ(与“传统”的DEFLATE实现如gzip不同),哈希表中不使用链接,每个哈希键只有一个条目。
这个crate生成的输出不是位相同的,但输出应该与其他解码器完全兼容,至少对于压缩级别1。
压缩级别2没有正式文档,但这个crate按如下方式实现它
- 如果
opc[7:5] == 0b000
,则复制以下字面值的opc[4:0] + 1
- 否则它是一个回引用。将初始
len
设置为opc[7:5] + 2
,并将初始disp[12:8]
设置为opc[4:0]
- 如果
opc[7:5] == 0b111
,则存在扩展长度。len
+= 所有字节,直到并包括第一个非0xff字节 - 将初始
disp[7:0]
设置为下一个字节 - 如果初始的
disp
全部是 1 位,disp
+= 下两个字节作为一个大端整数
- 如果
- 由于某种原因,文件不允许以需要扩展位移字节的回参考结束
与原始代码一样,这个crate不支持"流式"压缩。它只对完整输入进行操作。