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 压缩
9,636,295 每月下载量
用于 37,849 个crate(直接使用101个)
225KB
4.5K SLoC
miniz_oxide
一个完全安全的、纯Rust替换miniz DEFLATE/zlib编码/解码器。这个crate的主要目的是用作flate2的后端,但也可以单独使用。使用具有rust_backend
功能的flate2提供了一个易于使用的miniz_oxide流式API。
库完全no_std。默认情况下,启用了with-alloc
功能,因为它需要使用alloc
和collection
crates来分配内存。
std
功能还会在未使用no_std
的情况下启用某些功能。目前这仅意味着在启用with-alloc
的情况下,为简单解压缩函数返回的DecompressError
错误结构实现Error。
使用default-features = false
使用库时,将删除对alloc
和collection
crates的依赖,使其适用于没有分配器的系统。不使用分配运行将减少crate的功能
- 完全移除了
deflate
模块 - 移除了一些返回
Vec
的inflate
函数
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