#deflate #zlib #miniz #编码 #替换

no-std miniz_oxide

基于miniz重写的Rust DEFLATE压缩/解压缩库

32个版本

0.8.0 2024年8月8日
0.7.4 2024年6月18日
0.7.3 2024年5月17日
0.7.2 2024年2月3日
0.1.1 2017年10月28日

#7 in 压缩

Download history 1908441/week @ 2024-05-04 1990050/week @ 2024-05-11 2148248/week @ 2024-05-18 2125841/week @ 2024-05-25 2295086/week @ 2024-06-01 2291344/week @ 2024-06-08 2312902/week @ 2024-06-15 2373451/week @ 2024-06-22 2138382/week @ 2024-06-29 2402357/week @ 2024-07-06 2342042/week @ 2024-07-13 2384626/week @ 2024-07-20 2337530/week @ 2024-07-27 2317439/week @ 2024-08-03 2417976/week @ 2024-08-10 2173978/week @ 2024-08-17

9,636,295 每月下载量
用于 37,849 个crate(直接使用101个)

MIT OR Zlib OR Apache-2.0

225KB
4.5K SLoC

miniz_oxide

一个完全安全的、纯Rust替换miniz DEFLATE/zlib编码/解码器。这个crate的主要目的是用作flate2的后端,但也可以单独使用。使用具有rust_backend功能的flate2提供了一个易于使用的miniz_oxide流式API。

库完全no_std。默认情况下,启用了with-alloc功能,因为它需要使用alloccollectioncrates来分配内存。

std功能还会在未使用no_std的情况下启用某些功能。目前这仅意味着在启用with-alloc的情况下,为简单解压缩函数返回的DecompressError错误结构实现Error

使用default-features = false使用库时,将删除对alloccollectioncrates的依赖,使其适用于没有分配器的系统。不使用分配运行将减少crate的功能

  • 完全移除了deflate模块
  • 移除了一些返回Vecinflate函数

miniz_oxide 0.5.x和0.6.x至少需要rust 1.40.0,0.3.x至少需要rust 0.36.0。

miniz_oxide不使用不安全的代码。

miniz_oxide 可以选择性地使用通过 simd-adler32 包加速的 adler32 版本,通过启用 'simd' 功能实现。默认情况下,它不会启用,因为由于使用 simd 内置函数,simd-adler32 必须使用 unsafe。默认设置使用没有 unsafe 代码的 adler 包。

用法

简单的压缩/解压缩


use miniz_oxide::deflate::compress_to_vec;
use miniz_oxide::inflate::decompress_to_vec;

fn roundtrip(data: &[u8]) {
    // Compress the input
    let compressed = compress_to_vec(data, 6);
    // Decompress the compressed input and limit max output size to avoid going out of memory on large/malformed input.
    let decompressed = decompress_to_vec_with_limit(compressed.as_slice(), 60000).expect("Failed to decompress!");
    // Check roundtrip succeeded
    assert_eq!(data, decompressed);
}

fn main() {
    roundtrip("Hello, world!".as_bytes());
}

这些简单的函数将一次性完成所有操作,因此不建议用于除原型设计/测试之外的使用场景,因为实际数据可以具有任何大小,从而导致输出 Vector 的内存分配非常大。请考虑通过 flate2 使用 miniz_oxide,它使流式(解)压缩变得简单,或者使用低级流式函数。

依赖项

~235KB