#位字段 #长度 #压缩 #紧凑 #编码 #运行长度编码器

bitfield-rle

一种压缩位字段的运行长度编码器

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 压缩

Download history 597/week @ 2024-04-19 390/week @ 2024-04-26 341/week @ 2024-05-03 318/week @ 2024-05-10 381/week @ 2024-05-17 261/week @ 2024-05-24 304/week @ 2024-05-31 250/week @ 2024-06-07 262/week @ 2024-06-14 310/week @ 2024-06-21 176/week @ 2024-06-28 193/week @ 2024-07-05 295/week @ 2024-07-12 260/week @ 2024-07-19 271/week @ 2024-07-26 306/week @ 2024-08-02

1,213 每月下载量
8 个crate中使用(通过 ggrs

MIT/Apache

15KB
172

bitfield-rle

crates.io version build status downloads docs.rs docs

一种压缩位字段的运行长度编码器。

编码器使用紧凑格式,并且只有在压缩位字段时才会对位序列进行运行长度编码。因此,编码后的位字段应该始终比原始位字段小或相同,除非是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