64个版本 (32个稳定版)
新 1.0.32 | 2024年8月20日 |
---|---|
1.0.30 | 2024年4月29日 |
1.0.28 | 2023年10月13日 |
1.0.26 | 2023年4月28日 |
0.1.0 | 2014年11月27日 |
3 in 压缩
每月下载量7,473,814
用于10,286个crate (1,925直接)
235KB
4K SLoC
flate2
一个基于DEFLATE的流式压缩/解压缩库,在Rust中使用。
此crate默认使用miniz_oxide
crate,它是miniz.c
的纯Rust版本。此crate还支持其他后端,例如广泛可用的zlib库或高性能的zlib-ng库。
支持的格式
- deflate
- zlib
- gzip
# Cargo.toml
[dependencies]
flate2 = "1.0"
MSRV (最小支持Rust版本)策略
此crate支持Rust编译器的当前和上一个稳定版本。例如,如果当前稳定版是1.80,则此crate支持1.80和1.79。
其他编译器版本可能可以工作,但失败可能不会被视为flate2
的bug。
Cargo.toml
文件指定了一个rust-version
,该版本在某些时候通过了当前版本的构建。此值仅供参考,并且可能会随时更改。
rust-version
是一个尽最大努力的测量值,与MSRV不同。可以通过PR来增加rust-version
以通过测试,只要MSRV仍然保持。当rust-version
增加时,下一个版本应该是小版本,以便受影响的用户可以锁定到上一个小版本。
压缩
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。它完全不支持32位CPU,并且与mingw不兼容。更多信息请查阅crate文档。请注意,cloudflare_zlib
如果您的crate图中的任何其他crate使用另一个版本的zlib/libz,则可能导致破坏。
许可证
本项目的许可证可以是以下之一:
- Apache License 2.0(LICENSE-APACHE或https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交给本项目以供包含的任何贡献都将根据上述许可证双许可,而无需任何额外的条款或条件。
依赖项
~0–1.1MB
~14K SLoC