#文件扩展名 #解压缩 #gzip #zstd #bzip2 #文件格式 #读取文件

autocompress

根据魔数字节或文件扩展名自动选择合适的解码器或编码器

8 个版本 (4 个破坏性更新)

0.6.0 2023 年 12 月 24 日
0.5.1 2023 年 12 月 4 日
0.4.2 2023 年 11 月 16 日
0.2.2 2021 年 7 月 18 日
0.1.0 2020 年 4 月 1 日

压缩 中排名 #56

Download history 49/week @ 2024-04-15 29/week @ 2024-04-22 18/week @ 2024-04-29 15/week @ 2024-05-06 15/week @ 2024-05-13 41/week @ 2024-05-20 41/week @ 2024-05-27 35/week @ 2024-06-03 31/week @ 2024-06-10 38/week @ 2024-06-17 296/week @ 2024-06-24 717/week @ 2024-07-01 250/week @ 2024-07-08 534/week @ 2024-07-15 378/week @ 2024-07-22 215/week @ 2024-07-29

每月下载量 1,377
proxy-rs 中使用

Apache-2.0

210KB
4.5K SLoC

autocompress-rs

Build GitHub GitHub top language Crates.io Docs.rs

自动从魔数字节选择合适的解码器或从文件扩展名选择编码器。此库还提供 I/O 线程池,以在后台线程中执行解压缩和压缩。

支持的文件格式

功能标志

  • gzip:支持 Gzip 格式
  • bgzip:支持 bgzip 格式
  • bzip2:支持 Bzip2 格式
  • xz:支持 XZ 格式
  • zstd:支持 Zstd 格式
  • rayon:使用 rayon 将压缩和解压缩过程卸载到另一个线程
  • tokio:使用 tokio 支持异步读取器和写入器
  • tokio_fs:启用 autodetect_async_open 函数

示例

从文件读取

use std::io::prelude::*;
use autocompress::autodetect_open;

fn main() -> anyhow::Result<()> {
    let mut reader = autodetect_open("testfiles/pg2701.txt.xz")?;
    let mut buf = Vec::new();
    reader.read_to_end(&mut buf)?;
    Ok(())
}

写入文件

use std::io::prelude::*;
use autocompress::{autodetect_create, CompressionLevel};

fn main() -> anyhow::Result<()> {
    let mut writer = autodetect_create("target/doc-index.xz", CompressionLevel::Default)?;
    writer.write_all(&b"Hello, world\n"[..])?;
    Ok(())
}

并行压缩文件

use std::io::prelude::*;
use autocompress::{autodetect_parallel_create, CompressionLevel};

fn main() -> anyhow::Result<()> {
  let mut writer = autodetect_parallel_create("target/doc-index2.xz", CompressionLevel::Default)?;
  writer.write_all(&b"Hello, world\n"[..])?;
  Ok(())
}

依赖关系

~0.3–3.5MB
~64K SLoC