2个稳定版本
1.0.25 | 2022年6月18日 |
---|
#161 in 压缩
205KB
3.5K SLoC
flate2
一个基于Rust的流式压缩/解压缩库,支持DEFLATE流。
此crate默认使用miniz_oxide
crate,它是纯Rust的miniz.c
移植。此crate还支持其他后端,如广泛可用的zlib库或高性能的zlib-ng库。
支持的格式
- deflate
- zlib
- gzip
# Cargo.toml
[dependencies]
flate2 = "1.0"
压缩
use std::io::prelude::*;
use flate2::Compression;
use flate2::write::ZlibEncoder;
fn main() {
let mut e = ZlibEncoder::new(Vec::new(), Compression::default());
e.write_all(b"foo");
e.write_all(b"bar");
let compressed_bytes = e.finish();
}
解压缩
use std::io::prelude::*;
use flate2::read::GzDecoder;
fn main() {
let mut d = GzDecoder::new("...".as_bytes());
let mut s = String::new();
d.read_to_string(&mut s).unwrap();
println!("{}", s);
}
后端
默认的miniz_oxide
后端的优势在于它是纯Rust。如果你需要最大性能,可以使用zlib-ng C库
[dependencies]
flate2 = { version = "1.0.17", features = ["zlib-ng"], default-features = false }
请注意,即使你的crate图中的其他部分依赖于zlib,"zlib-ng"
功能仍然有效。
但是,如果你已经使用其他依赖于zlib的C或Rust库,并且想要避免包含zlib和zlib-ng,你可以将它们用于Rust代码
[dependencies]
flate2 = { version = "1.0.17", features = ["zlib"], default-features = false }
或者,如果你有依赖于zlib的C或Rust代码,并且想要通过libz-sys在zlib-compat模式下使用zlib-ng,使用
[dependencies]
flate2 = { version = "1.0.17", features = ["zlib-ng-compat"], default-features = false }
请注意,当使用"zlib-ng-compat"
功能时,如果你的依赖图中的任何crate明确请求标准zlib或直接使用libz-sys而不带default-features = false
,则你会得到标准zlib而不是zlib-ng。有关详细信息,请参阅libz-sys的README。为了避免这种情况,请使用"zlib-ng"
功能。
为了与之前版本的 flate2
兼容,Cloudflare 提供了优化过的 zlib 版本,通过 cloudflare_zlib
功能。它的速度不如 zlib-ng 快,但比原版 zlib 快。它需要具有 SSE 4.2 的 x86-64 CPU 或具有 NEON & CRC 的 ARM64 CPU。它完全不支持 32 位 CPU,并且与 mingw 不兼容。更多信息请查看 crate 文档。注意,如果您的 crate 图中的任何其他 crate 使用了另一个版本的 zlib/libz,则 cloudflare_zlib
将会导致损坏。
许可证
本项目可在以下任一许可证下使用:
- Apache License, Version 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
您可选择其中之一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意向提交以包含在本项目中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~0–1MB
~12K SLoC