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

libdeflater

以非流式缓冲区操作形式暴露对libdeflate的DEFLATE(解压)压缩的绑定。包含对原始deflate、zlib和gzip数据的绑定。

26 个版本 (6 个稳定版)

1.21.0 2024年8月6日
1.20.0 2024年4月4日
1.19.3 2024年2月28日
1.19.0 2023年9月19日
0.2.0 2019年10月6日

#18压缩

Download history 13038/week @ 2024-04-22 10337/week @ 2024-04-29 5954/week @ 2024-05-06 5355/week @ 2024-05-13 5862/week @ 2024-05-20 5428/week @ 2024-05-27 5264/week @ 2024-06-03 5137/week @ 2024-06-10 5648/week @ 2024-06-17 5301/week @ 2024-06-24 4581/week @ 2024-07-01 5319/week @ 2024-07-08 5548/week @ 2024-07-15 5964/week @ 2024-07-22 6311/week @ 2024-07-29 6976/week @ 2024-08-05

25,365 每月下载次数
69 个crate中 使用 20 直接

Apache-2.0

450KB
9K SLoC

C 7K SLoC // 0.3% comments Shell 1.5K SLoC // 0.1% comments Rust 575 SLoC // 0.0% comments Python 66 SLoC // 0.2% comments

libdeflater

Rust语言对libdeflate的绑定,libdeflate是一个用于处理gzip/zlib/deflate数据的性能库。

Build Status Crates.io Documentation

libdeflater = "1.21.0"

libdeflater是围绕libdeflate的一个薄层包装库。Libdeflate适用于输入数据在开始时就已知的或可以将(大型)输入数据集分成更小的块(例如,基因组bam文件,一些对象存储,专门的后端,游戏网络代码数据包)的应用程序。

这是一个围绕libdeflate的薄层库,

⚠️ 警告libdeflate最适合于已知输入数据大致大小的专用用例。如果您需要支持流式传输的通用deflate库,则应使用类似flate2的工具。

示例

示例源码在此处。要运行示例

cargo run --example gz_compress.rs
cargo run --example gz_decompress.rs

基准测试

基准数据来自 卡尔加里语料库坎特伯雷语料库。下方的基准表是根据以下步骤制作的

wget http://www.data-compression.info/files/corpora/largecalgarycorpus.zip
unzip -d bench_data largecalgarycorpus.zip
wget http://corpus.canterbury.ac.nz/resources/cantrbry.zip
unzip -d bench_data cantrbry.zip

# runs benchmarks against all files in `bench_data`
cargo bench
scripts/process-bench.rb encode
scripts/process-bench.rb decode

压缩

在此语料库上的平均加速比约为 2-3 倍

bench           size [KB]    speedup    flate2 [us]    libdeflate [us]
alice29.txt     152          3.1        5636           1821
asyoulik.txt    125          3.1        4911           1584
bib             111          2.9        3278           1133
book1           768          3.2        32697          10377
book2           610          2.8        19780          6975
cp.html         24           2.3        394            170
fields.c        11           2.4        155            65
geo             102          7.1        7717           1082
grammar.lsp     3            2.0        38             19
kennedy.xls     1029         7.3        46598          6427
lcet10.txt      426          3.0        14924          4931
news            377          2.5        10160          4052
obj1            21           2.6        385            149
obj2            246          3.5        7771           2218
paper1          53           2.4        1312           543
paper2          82           2.7        2608           955
paper3          46           2.5        1303           513
paper4          13           2.2        226            102
paper5          11           2.1        182            88
paper6          38           2.3        848            367
pic             513          3.8        7508           1990
plrabn12.txt    481          3.4        22527          6698
progc           39           2.4        882            361
progl           71           2.8        1553           559
progp           49           2.6        904            346
ptt5            513          3.8        7389           1964
sum             38           3.8        1124           297
trans           93           2.5        1595           650
xargs.1         4            1.9        40             21

解压

在此语料库上的平均加速比约为 2 倍。

bench           size [KB]    speedup    flate2 [us]    libdeflate [us]
alice29.txt     152          3.0        338            114
asyoulik.txt    125          2.8        300            106
bib             111          3.2        240            76
book1           768          2.5        1906           768
book2           610          2.7        1376           501
cp.html         24           2.0        31             16
fields.c        11           2.1        15             7
geo             102          2.3        359            160
grammar.lsp     3            1.8        7              4
kennedy.xls     1029         1.4        1241           911
lcet10.txt      426          2.8        919            325
news            377          2.4        969            400
obj1            21           1.9        41             21
obj2            246          2.5        558            220
paper1          53           3.2        109            34
paper2          82           3.1        182            58
paper3          46           3.0        100            34
paper4          13           1.9        22             12
paper5          11           1.9        21             11
paper6          38           3.0        75             25
pic             513          3.1        617            198
plrabn12.txt    481          2.5        1183           472
progc           39           3.1        76             25
progl           71           3.5        103            30
progp           49           3.0        65             22
ptt5            513          3.1        616            197
sum             38           2.5        75             31
trans           93           3.7        131            36
xargs.1         4            1.8        9              5

基准说明

  • 所有基准均为单线程

  • 未考虑 I/O/流开销。比较前将解压数据读入内存

  • 与未设置功能标志的 flate2 进行比较(即 miniz 实现)。选择 flate2 是因为它是最受欢迎的。

  • 在其他 flate2 后端上的比较可以在 bench-flate2-miniz-oxidebench-flate2-zlib 分支上找到。对于一些语料库条目,zlib 后端要快约 8%。

  • 两种情况下都使用默认压缩设置进行压缩

  • 语料库条目使用 flate2 默认压缩级别进行压缩

编译时功能

您可以通过以下功能来定制构建

  • use_rust_alloc:使 libdeflate 使用 Rust 的分配器而不是 libc 的分配器。当 Rust 预配置为使用 自定义全局分配器(例如,基于池的、跟踪的或其他)时,这很有用。
  • freestanding:以独立模式构建 libdeflate(不依赖 libc)。这对于没有 C stdlib 的目标很有用(例如 wasm32-unknown-unknown),否则它们将无法编译。隐含 use_rust_alloc

依赖项