5个不稳定版本
0.2.1 | 2024年3月31日 |
---|---|
0.2.0 | 2020年5月17日 |
0.1.1 | 2020年2月19日 |
0.1.0 | 2020年2月19日 |
0.0.0 | 2018年7月10日 |
#67 in 压缩
1,213 每月下载量
在 8 个crate中使用(通过 ggrs)
15KB
172 行
bitfield-rle
一种压缩位字段的运行长度编码器。
编码器使用紧凑格式,并且只有在压缩位字段时才会对位序列进行运行长度编码。因此,编码后的位字段应该始终比原始位字段小或相同,除非是1-6字节的头。
由于这使用了运行长度编码,如果你在位字段中有较长的相同位序列,你会得到最佳的压缩效果。
用法
extern crate bitfield_rle;
extern crate sparse_bitfield;
use sparse_bitfield::Bitfield;
let mut bits = Bitfield::new(1024);
bits.set(400, true);
let enc = bitfield_rle::encode(bits);
assert_eq!(enc.len(), 6);
let dec = bitfield_rle::decode(enc);
let bits = Bitfield::from_bytes(dec);
assert_eq!(bits.get(400), true);
格式
编码的位字段是一系列压缩和解压缩的位序列。所有序列都以一个varint为头。
如果varint的最后一位被设置(它是一个奇数),则头表示一个压缩的位序列。
S = varint([l << 2, b << 1, 1])
where
S = compressed sequence
l = byte length of sequence
b = bit
如果varint的最后一位设置为 0
,则头表示一个未压缩的位序列。
S = [varint([l << 1, 0]), b]
where
S = uncompressed sequence
l = byte length of bitfield
b = bitfield
安装
$ cargo add bitfield-rle
许可证
MIT OR Apache-2.0
依赖关系
~135KB