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 压缩
1,654,825 每月下载量
在 1,844 个crate中使用 (直接使用201个)
675KB
6.5K SLoC
bzip2
这是一个为Rust提供的带有libbz2绑定的流式压缩/解压缩库。
# Cargo.toml
[dependencies]
bzip2 = "0.4"
许可
本项目受以下任一许可协议的保护
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证的定义,您提交的任何有意包含在本存储库中的贡献将如上所述双许可,不附加任何额外的条款或条件。
lib.rs
:
为Rust提供的Bzip压缩
此库包含对libbz2的绑定,以支持Rust的bzip压缩和解压缩。此库提供的流主要在reader
和writer
模块中。每个模块都提供压缩器和解压缩器,具体取决于您需要的操作。
还可以通过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流,则这些操作将是无操作的。