#编码 #API绑定 #IO流 #bzip

bzip2

为bzip2压缩和解压缩提供的libbzip2绑定,以Reader/Writer流的形式暴露

20个版本

使用旧的Rust 2015

0.4.4 2023年1月5日
0.4.3 2021年6月9日
0.4.2 2021年2月19日
0.4.1 2020年7月6日
0.0.3 2014年11月19日

#34 in 压缩

Download history 362632/week @ 2024-03-14 334079/week @ 2024-03-21 337876/week @ 2024-03-28 317590/week @ 2024-04-04 330109/week @ 2024-04-11 309213/week @ 2024-04-18 314321/week @ 2024-04-25 304385/week @ 2024-05-02 312465/week @ 2024-05-09 322523/week @ 2024-05-16 311343/week @ 2024-05-23 385172/week @ 2024-05-30 410879/week @ 2024-06-06 383939/week @ 2024-06-13 407010/week @ 2024-06-20 371202/week @ 2024-06-27

1,654,825 每月下载量
1,844 个crate中使用 (直接使用201个)

MIT/Apache

675KB
6.5K SLoC

C 5K SLoC // 0.2% comments Rust 1K SLoC // 0.0% comments XSL 278 SLoC // 0.1% comments Shell 72 SLoC // 0.3% comments Perl 38 SLoC // 0.4% comments

bzip2

文档

这是一个为Rust提供的带有libbz2绑定的流式压缩/解压缩库。

# Cargo.toml
[dependencies]
bzip2 = "0.4"

许可

本项目受以下任一许可协议的保护

由您选择。

贡献

除非您明确表示,否则根据Apache-2.0许可证的定义,您提交的任何有意包含在本存储库中的贡献将如上所述双许可,不附加任何额外的条款或条件。


lib.rs:

为Rust提供的Bzip压缩

此库包含对libbz2的绑定,以支持Rust的bzip压缩和解压缩。此库提供的流主要在readerwriter模块中。每个模块都提供压缩器和解压缩器,具体取决于您需要的操作。

还可以通过raw模块访问原始的解压缩/压缩流,该模块与libbz2的接口非常接近。

示例

use std::io::prelude::*;
use bzip2::Compression;
use bzip2::read::{BzEncoder, BzDecoder};

// Round trip some bytes from a byte source, into a compressor, into a
// decompressor, and finally into a vector.
let data = "Hello, World!".as_bytes();
let compressor = BzEncoder::new(data, Compression::best());
let mut decompressor = BzDecoder::new(compressor);

let mut contents = String::new();
decompressor.read_to_string(&mut contents).unwrap();
assert_eq!(contents, "Hello, World!");

多流(例如Wikipedia或pbzip2)

一些工具(如pbzip2)或来自Wikipedia等来源的数据被编码为所谓的bzip2 "多流",这意味着它们包含连续的bzip数据块。 BzDecoder不会尝试转换源流中的第一个bzip数据块之后的任何内容。因此,如果您想从输入中解码所有bzip数据块直到文件结束,请使用MultiBzDecoder

提示:如果您使用BzDecoder解码数据,输出不完整且正好为900K字节,您可能需要一个MultiBzDecoder

异步I/O

此crate可以通过此crate的tokio功能选择性地支持Tokio堆栈的异步I/O流

bzip2 = { version = "0.4", features = ["tokio"] }

所有方法都能够在内部处理可能返回 ErrorKind::WouldBlock 的流,这意味着它们尚未准备好执行特定操作。

然而,在使用这些对象时需要谨慎。特别是Tokio运行时,要求在丢弃流之前数据必须完全刷新。为了与阻塞流兼容,所有流在丢弃时都会刷新/写入,这并不总是进行I/O的最佳时机。但如果在丢弃之前刷新I/O流,则这些操作将是无操作的。

依赖项