1个不稳定版本
0.2.54 | 2023年9月20日 |
---|
#500 在 压缩
每月 155 次下载
在 9 个crate中(通过 makepad-zune-png)使用
145KB
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目录。