1 个稳定版本
1.0.0 | 2022年6月22日 |
---|
#360 在 压缩
36KB
626 行
A ZX0 压缩算法的 Rust 实现
本框架提供了一个 Rust 实现的 Einar Saukas 的优秀 ZX0 压缩算法。
本框架提供的算法是对原始基于 C 的实现的优化变体,因此比原始实现快约 40%。此外,Rust 实现还提供了线程安全,这意味着现在可以并行压缩文件。最后,本实现没有内存泄漏。
为了确保正确性,本框架提供了一个包含原始 C 代码 Rust 封装的子框架。此封装在本框架的测试套件中用作参考,以确保其输出与原始实现完全相同。
压缩器可以使用两种方式使用
-
通过实例化一个
Compressor
实例,配置它,并调用其compress
方法。 -
使用顶层的
compress
快捷函数以默认设置压缩。
请参阅 Compressor
结构的文档以获取有关如何使用本框架的更多信息,或检查框架源代码中提供的示例。
此外,Einar Saukas 原始实现的 readme 文件 中提供了大量信息。
命令行工具
ZX0 Rust 框架附带了一个压缩器的命令行版本。此实用程序可以使用以下方式安装
$ cargo install zx0
这将安装一个 zx0
二进制文件,可以用来从命令行压缩文件。
命令行压缩器可以这样使用
$ zx0 input_file output_file.zx0
命令行压缩器支持库提供的所有功能。请运行 zx0 --help
以获取所有功能和如何使用的概述。
用法
要开始在您的项目中使用 ZX0 压缩器,请将以下行添加到您的 Cargo 依赖项中
zx0 = "1.0.0"
然后可以通过提供的结构调用压缩器
use zx0::Compressor;
let result = Compressor::new().compress(input_slice);
// From here you can access the compressed data with result.output, and
// retrieve any compressor metadata such as the "delta" value by accessing the
// other struct members.
或者,如果您只需要压缩一些数据并在某处使用压缩后的输出数据,您可以使用此快捷方式
let output_vec = zx0::compress(input_slice);
高级用法
Compressor
结构提供了构建器风格的配置上下文。通过调用一些额外的函数,压缩器可以与原始基于 C 的版本完全相同地进行配置。
use zx0::Compressor;
let result = Compressor::new()
.skip(128) // Prefix/suffix skipping
.backwards_mode(true) // Backward compression
.quick_mode(true) // Quick but less efficient compression
.classic_mode(true) // V1 file format
.compress(input_slice);
此外,还可以指定一个进度回调。该回调将在压缩过程中定期调用,并会提供从 0.0
到 1.0
的进度值。
use zx0::Compressor;
let result = Compressor::new()
.progress_callback(|progress| {
println!("Compression progress: {:.2} percent", progress * 100.0);
})
.compress(input_slice);
有关如何使用跳过和反向模式功能的更多信息,请参阅 Einar Saukas 原始实现的 readme 文件。
许可证
与原始 C 实现一样,此 crate 中的压缩器和所有其他代码均根据 3-clause BSD 许可证发布。