#deflate #inflate

无需std makepad-zune-inflate

使用纯Rust实现的重度优化的deflate解压缩器

1个不稳定版本

0.2.54 2023年9月20日

#500压缩

Download history 35/week @ 2024-03-11 29/week @ 2024-03-18 50/week @ 2024-03-25 82/week @ 2024-04-01 28/week @ 2024-04-08 45/week @ 2024-04-15 37/week @ 2024-04-22 18/week @ 2024-04-29 47/week @ 2024-05-06 30/week @ 2024-05-13 31/week @ 2024-05-20 32/week @ 2024-05-27 39/week @ 2024-06-03 41/week @ 2024-06-10 34/week @ 2024-06-17 39/week @ 2024-06-24

每月 155 次下载
9 个crate中(通过 makepad-zune-png)使用

MIT OR Apache-2.0 OR Zlib

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

比较。

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

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

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

如您所见,与flate2/miniz-oxide相比,我们目前缺少一些具体特性。

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

基准测试

使用criterion完成的最新基准测试在zune-benchmarks网站上提供,此库的基准测试有inflate: 前缀。

模糊测试

解码器目前正在miniz-oxidezlib-ng上进行模糊测试以确保正确性,请参阅fuzz/src目录。

依赖关系