5 个版本

0.2.4 2024 年 3 月 2 日
0.2.3 2020 年 9 月 22 日
0.2.2 2017 年 9 月 28 日
0.2.1 2017 年 7 月 9 日
0.2.0 2017 年 7 月 9 日

#96 in 压缩

Download history 7/week @ 2024-03-27 11/week @ 2024-04-03

81 个月下载

MIT 许可证

27KB
722

bitterlemon

Bitterlemon 是一个数据格式和 Rust 库包,用于高效地将位序列存储在字节流中,使用运行长度编码(RLE)。Bitterlemon 将连续的位运行打包成紧凑的 RLE 表示,在可能的情况下,如果 RLE 无法提高压缩率,则回退到标准字节打包。与输入或输出大小无关,没有限制或压缩性能惩罚。

使用方法

bitterlemon 添加为您的 Cargo.toml 文件中的依赖项

[dependencies]
bitterlemon = ">= 0.2.0"

API 文档托管在 docs.rs

许可证

Bitterlemon 根据 MIT 许可证发布。有关更多信息,请参阅文件 LICENSE

数据格式

Bitterlemon 数据是由一系列 运行 组成的,运行进一步分为 设置运行清除运行。运行是连续位序列的紧凑表示,所有位具有相同的值。清除运行包含一系列 0,而设置运行包含一系列 1。一个 是将位打包到字节中的大小序列,位值变化过于频繁,无法从运行中获益。运行长度可以是 1–64 字节,而帧可以是 1–128 字节。

字节值

运行以以下位表示编码为单个字节

MSB  1Tnnnnnn  LSB

T 是运行类型(清除运行为 0,设置运行为 1)和 nnnnnn 是运行长度(64 的运行编码为 000000)。

帧如下编码

0LLLLLLL bbbbbbbb bbbbbbbb … bbbbbbbb

LLLLLLL 表示帧中的 数(长度为 128 的帧编码为 0000000)。接下来的字节包含帧内的位,从下一个字节的最高位开始。如果帧长度不与字节边界对齐,则应填充 0 位以完成最后一个字节。在所有情况下,引导字节的长度是编码的位数的权威。

编码帧所需的字节数可以按以下方式计算

frame_size_in_bytes = ((number_of_bits + 7) >> 3) + 1

实现细节

参考编码器首先将输入位流转换为一系列运行,每个运行长度为 1 到 64 位。然后进行第二次遍历,将一些运行替换为帧,在这种情况下,使用帧会更少字节。

依赖关系

~66KB