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 压缩
81 个月下载
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