5 个稳定版本
使用旧的 Rust 2015
1.1.2 | 2022年2月17日 |
---|---|
1.1.1 | 2018年11月25日 |
1.1.0 | 2018年11月22日 |
1.0.1 | 2018年11月22日 |
1.0.0 | 2018年11月6日 |
#715 in 压缩
24 每月下载量
5MB
242K SLoC
rust-brotli
- 一个完全兼容的 FFI,用于与 https://github.com/google/brotli 二进制文件直接兼容
- 完全支持自定义分配器
- 多线程压缩,以便多个线程可以同时对单个文件进行操作
- 可连接性模式,以添加 https://github.com/google/brotli/issues/628 中请求的功能
- 二进制工具 catbrotli 可以完成此操作,如果第一个文件使用 -apendable 指定,第二个文件使用 -catable 指定
- 验证模式,其中文件将被双重检查以确认可以使用相同的设置进行解压缩;对于基准测试或模糊测试很有用
- 魔数:brotli 文件可以具有有用的头部,包含一些魔数字节、可连接性信息和最终输出大小,以便预分配内存
项目要求
将 C brotli 压缩器的直接 no-stdlib 版本移植到 Rust
不依赖于 Rust stdlib:这个库非常适合在 Rust 内核中解压缩,以及其他用途。
这有助于比较 C 和 Rust 在相同算法、数据结构和优化条件下如何比较。
使用 C 接口
rust-brotli 是官方 http://github.com/google/brotli/ C 实现的替代品。这意味着您可以从支持该库的任何位置使用它。要以这种方式构建 rust-brotli,请进入 c 子目录并在那里运行 make
cd c && make
这应该会构建 c/target/release/libbrotli.so,并且应该构建用于压缩和解压缩任何 brotli 文件的 C 的纯命令行工具。
c/target/release 中的 libbrotli.so 应该能够替换任何其他 libbrotli.so 文件,但具有使用安全 rust(除了 FFI 绑定)的所有优点
代码还允许更广泛的选项,包括强制预测模式(例如 UTF8 与有符号与 MSB 与 LSB)以及将字面成本权重从 540 更改为其他值。
此外,还暴露了 CATABLE 和 APPENDABLE 选项,允许以这种方式创建文件的连接。
具体来说,可以使用catbrotli工具以任意顺序连接CATABLE文件,而APPENDABLE文件可以是catable文件序列中的第一个文件... 例如,您可以组合appendable.br、catable1.br、catable2.br、catable3.br
或者简单地catable0.br、catable1.br、catable2.br、catable3.br
多线程压缩
C FFI 允许您创建一个工作池,该工作池可用于压缩多个文件,而无需在每次压缩时重新创建线程
BrotliEncoderWorkPool *work_pool = BrotliEncoderCreateWorkPool(num_threads != 0 ? num_threads - 1 : 0, NULL /* custom allocator */, NULL, NULL);
if (!work_pool) {
return 0;
}
size_t out_len = BrotliEncoderMaxCompressedSizeMulti(len, num_threads);
reinit_vec_u8(ret_buffer, out_len);
ret = BrotliEncoderCompressWorkPool(
work_pool,
num_params,
param_keys,
param_values,
len,
data,
&out_len,
ret_buffer->data,
num_threads,
NULL /* custom allocator*/, NULL, NULL);
BrotliEncoderDestroyWorkPool(work_pool);
示例请参见multiexample.c