#fastlz #lz77 #compression-level #no-alloc

不依赖std 程序+库 fastlz-rs

纯Rust实现的FastLZ

1个不稳定版本

0.0.1 2024年7月19日

#9#lz77

每月49次下载

0BSD 许可证

46KB
1K SLoC

纯Rust实现的FastLZ

docs.rs


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不支持"流式"压缩。它只对完整输入进行操作。

无运行时依赖

特性