#无损 # #分配 #支持 #泛型 #解压缩器

no-std lzss

A LZSS 解/压缩器(无损数据压缩,支持no_std,纯Rust编写)

5个版本

0.9.1 2023年5月15日
0.9.0 2023年2月1日
0.8.2 2021年9月26日
0.8.1 2021年7月15日
0.8.0 2021年6月7日

#102 in 压缩

Download history 508/week @ 2024-03-14 614/week @ 2024-03-21 1199/week @ 2024-03-28 1053/week @ 2024-04-04 771/week @ 2024-04-11 476/week @ 2024-04-18 551/week @ 2024-04-25 762/week @ 2024-05-02 411/week @ 2024-05-09 298/week @ 2024-05-16 337/week @ 2024-05-23 407/week @ 2024-05-30 475/week @ 2024-06-06 407/week @ 2024-06-13 701/week @ 2024-06-20 383/week @ 2024-06-27

2,023次每月下载
lzss-cli 中使用

MIT 许可证

65KB
1K SLoC

Build Status Dependency status crates.io Downloads Github stars License

crate lzss

从0.8到0.9的重要更改/破坏性更改

  • 特性 safe 已添加并默认启用,请参阅下面的安全性
  • 特性 const_panic 已移除,现在始终启用
  • 泛型的de-/compress重命名为de-/compress_stack

Lempel–Ziv–Storer–Szymanski解/压缩

lzss 是一个纯Rust编写的无损数据压缩算法。这个crate是为嵌入式系统构建的

  • 小型代码大小
  • 占用很少的RAM和CPU
  • no_std 功能
  • 所有参数都可以是编译时参数

泛型与动态

这个crate有两种形式:泛型(Lzss)和动态(LzssDyn)。

动态版本有一个压缩函数,所有参数都在运行时传递给它,这使得它非常灵活。

泛型版本具有编译时参数,将为每组不同的参数生成一个函数。这个函数将由编译器比动态版本更优化,缺点是使用多个参数集时会生成多个函数。

(同样适用于解压缩和其他函数,只有使用的函数将包含在生成的程序中。)

没有头文件

这个算法设计上没有任何头文件。请注意,无法检查内容是否正确,甚至长度是否匹配。建议根据需求添加头文件。

来源

此代码基于Haruhiko Okumura的LZSS编码器-解码器,位于公共领域。

为了创建与上述程序兼容的编码器-解码器,以下内容是必需的:在此库中C = 0x20,在Okumura的程序中P = (1+EI+EJ) / 9

特性

  • alloc - 允许使用堆上的缓冲区和VecWriter进行解/压缩。
  • safe - 仅使用安全代码(见下面的安全性说明)。
  • std - 启用 alloc 以及额外的 IOSimpleReaderIOSimpleWriter 以及 Error 实例,用于 LzssErrorLzssDynError

stdsafe 默认启用。

用法

默认情况下(stdsafe

[dependencies]
lzss = "0.9"

使用 no_std(且不使用 safe

[dependencies]
lzss = { version = "0.9", default-features = false }

示例

type MyLzss = Lzss<10, 4, 0x20, { 1 << 10 }, { 2 << 10 }>;
let input = b"Example Data";
let mut output = [0; 30];
let result = MyLzss::compress(
  SliceReader::new(input),
  SliceWriter::new(&mut output),
);
assert_eq!(result, Ok(14)); // there was no overflow and the output is 14 bytes long

安全性

使用 safe 功能时,代码不使用任何不安全代码(forbid(unsafe_code)),但会牺牲性能和大小 - 尽管在现代系统中这并不重要。

但在小型系统(如需要 no_std 的微控制器)上可能会很明显。这也是为什么它可以打开/关闭的原因。

命令行界面

为了在命令行中解压缩文件,请安装 lzss-cli

cargo install lzss-cli

示例

lzss e 10,4,0x20 <input >outout

依赖项