#deflate #inflate

无需std zune-inflate

纯Rust编写的优化程度极高的deflate解压缩器

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 压缩

Download history 123314/week @ 2024-04-23 133865/week @ 2024-04-30 123420/week @ 2024-05-07 143730/week @ 2024-05-14 145308/week @ 2024-05-21 146918/week @ 2024-05-28 146941/week @ 2024-06-04 142917/week @ 2024-06-11 129322/week @ 2024-06-18 130331/week @ 2024-06-25 122038/week @ 2024-07-02 145754/week @ 2024-07-09 157749/week @ 2024-07-16 148011/week @ 2024-07-23 172413/week @ 2024-07-30 157627/week @ 2024-08-06

658,932 个月下载量
用于 64 个crate (9 直接)

MIT OR Apache-2.0 OR Zlib

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指定了一些高级选项,可以更改解压缩设置。

比较。

我将与flate2miniz-oxide后端进行比较。

功能 zune-inflate flate2
zlib解压缩
delfate解压缩
gzip
压缩 即将推出
流式解压缩
不安全 [1]

[1] Flate写入未初始化的缓冲区

如您所见,与我们目前与flate2/miniz-oxide相比,我们确实缺少一些具体的功能。

实际上,我们并没有什么可以期待的,除了...它非常快...

基准测试

使用criterion进行的最新基准测试已托管在zune-benchmarks网站上,该库的基准测试具有inflate: 前缀。

模糊测试

解码器目前正由 miniz-oxidezlib-ng 同时进行正确性模糊测试,请参阅 fuzz/src 目录

依赖项