11个版本
0.3.1 | 2022年9月20日 |
---|---|
0.3.0 |
|
0.2.6 | 2022年9月13日 |
0.1.2 | 2022年9月11日 |
#227 in 压缩
每月80次下载
用于 3 个crate(2个直接使用)
64KB
1.5K SLoC
banzai
banzai是一个纯Rust bzip2编码器。目前它还是alpha版本软件,这意味着它只经过了有限的测试,不应依赖于它良好地工作且不会损坏您的数据。但这并不意味着我不关心性能或可靠性 - 欢迎提交bug报告!从长远来看,我希望这个库能够达到可以用于生产软件的程度。
要使用banzai作为类似bzip(1)
的命令行工具,可以通过cargo安装bnz。
这个库在输入大小上是线性时间的,并且没有使用unsafe
。当它更加成熟时,这些特性将使它成为安全关键应用的不错选择。
一般来说,banzai达到与参考实现相似的压缩率。然而,通常运行时间大约是两倍(不考虑参考实现使用其回退算法的情况,这要慢得多)。我认为这是因为运行时间主要由Burrows-Wheeler变换主导。由于bzip2使用BWT的“环绕”版本,banzai必须计算输入自身拼接的后缀数组。我打算研究如何利用这种形式输入的固有冗余来优化后缀数组构建。
这个库(目前)不包括解压缩器。Paolo Barbolini的bzip2-rs提供了一个纯Rust bzip2解压缩器,尽管我自己没有使用过,也不能对其质量进行保证。
接口
fn encode(reader: R, writer: io::BufWriter<W>, level: usize) -> io::Result<usize>
where
R: io::BufRead,
W: io::Write
使用输入缓冲区和BufWriter
的引用调用encode
。最后一个参数是level
,它是一个介于1
和9
之间的数字(包含),对应于块大小(块大小为level * 100_000
字节)。典型的默认值是9
。返回编码的输入字节数。
致谢
这是一个原始的libre软件。然而,实施指南是从几个自由软件来源中提取的。
banzai中使用的后缀数组构建算法是SA-IS,由Ge Nong,Sen Zhang和Wai Hong Chan开发。SA-IS实现的指南来自Yuta Mori的sais和burntsushi的suffix。
banzai中使用的Huffman编码实现从bzip2的参考实现中汲取了大量灵感,最初由Julian Seward编写,目前由Micah Snyder维护。
最后,Joe Tsai编写的非官方bzip2格式规范在bzip2二进制格式的具体方面非常有帮助。
依赖关系
~100KB