#deflate #zlib #gzip #zlib-ng #encoding #format #api-bindings

flate2

将DEFLATE压缩和解压缩作为Read/BufRead/Write流暴露。支持miniz_oxide和多个zlib实现。支持zlib、gzip和原始deflate流。

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 压缩

Download history 1517003/week @ 2024-05-04 1569607/week @ 2024-05-11 1557859/week @ 2024-05-18 1579689/week @ 2024-05-25 1716555/week @ 2024-06-01 1743301/week @ 2024-06-08 1648991/week @ 2024-06-15 1667635/week @ 2024-06-22 1554641/week @ 2024-06-29 1748909/week @ 2024-07-06 1704811/week @ 2024-07-13 1737672/week @ 2024-07-20 1723330/week @ 2024-07-27 1897221/week @ 2024-08-03 1937120/week @ 2024-08-10 1628120/week @ 2024-08-17

每月下载量7,473,814
用于10,286个crate (1,925直接)

MIT/Apache

235KB
4K SLoC

flate2

Crates.io Documentation

一个基于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-2.0许可证定义,您提交给本项目以供包含的任何贡献都将根据上述许可证双许可,而无需任何额外的条款或条件。

依赖项

~0–1.1MB
~14K SLoC