12个版本
0.2.54 | 2023年4月30日 |
---|---|
0.2.53 | 2023年3月28日 |
0.2.50 | 2023年2月13日 |
0.2.42 | 2023年1月15日 |
0.2.1 | 2022年12月31日 |
#25 in 压缩
658,932 个月下载量
用于 64 个crate (9 直接)
130KB
2K SLoC
zune-inflate
此crate提供了一种支持整个缓冲区解压缩的优化inflate算法。
支持的格式包括
- 原始deflate
- zlib (带zlib包装的deflate)
- gzip
实现主要基于Eric Biggers的libdeflate,因此具有相似的特性。
具体来说,我们不支持流式解压缩,而是偏好整个缓冲区解压缩。
安装
要在您的crate中使用,只需在Cargo.toml中添加以下内容
[dependencies]
#other amazing crates from other amazing people
zune-inflate = "0.2.0"
功能
可以使用cargo功能启用或禁用特定格式。
具体来说,可以启用以下功能
gzip
:启用gzip编码数据的解压缩zlib
:启用zlib编码数据的解压缩
要启用一个功能,修改Cargo.toml
条目为
[dependencies]
zune-inflate = { version = "0.2", default-features = false, features = ["#ADD_SPECIFIC_FEATURE"] }
使用方法。
该库提供了一个简单的API用于解压缩数据,根据您拥有的数据类型,通常选择一个decode[_suffix]
函数来解压缩您的数据
解压缩器期望在开始时提供整个缓冲区
解码原始deflate
要解码原始deflate数据,以下代码应能为您提供起点。
use zune_inflate::DeflateDecoder;
let totally_valid_data = [0; 23];
let mut decoder = DeflateDecoder::new( & totally_valid_data);
// panic on errors, because that's the cool way to go
let decompressed_data = decoder.decode_deflate().unwrap();
解码zlib
要解码包裹在zlib中的deflate数据,以下代码应能为您提供起点。
use zune_inflate::DeflateDecoder;
let totally_valid_data = [0; 23];
let mut decoder = DeflateDecoder::new( & totally_valid_data);
// panic on errors, because that's the cool way to go
let decompressed_data = decoder.decode_zlib().unwrap();
高级使用
通过DeflateOptions
指定了一些高级选项,可以更改解压缩设置。
比较。
我将与flate2
和miniz-oxide
后端进行比较。
功能 | zune-inflate |
flate2 |
---|---|---|
zlib解压缩 | 是 | 是 |
delfate解压缩 | 是 | 是 |
gzip | 是 | 是 |
压缩 | 即将推出 | 是 |
流式解压缩 | 否 | 是 |
不安全 | 否 | 是[1] |
[1] Flate写入未初始化的缓冲区
如您所见,与我们目前与flate2/miniz-oxide相比,我们确实缺少一些具体的功能。
实际上,我们并没有什么可以期待的,除了...它非常快...
基准测试
使用criterion进行的最新基准测试已托管在zune-benchmarks网站上,该库的基准测试具有inflate:
前缀。
模糊测试
解码器目前正由 miniz-oxide
和 zlib-ng
同时进行正确性模糊测试,请参阅 fuzz/src 目录