14 个版本
使用旧 Rust 2015
0.4.5 | 2019 年 2 月 13 日 |
---|---|
0.4.4 | 2018 年 12 月 10 日 |
0.4.3 | 2018 年 6 月 28 日 |
0.4.0 | 2018 年 3 月 27 日 |
0.1.0 | 2015 年 11 月 10 日 |
#27 in 压缩
89,462 个月下载
用于 214 个包 (39 个直接使用)
66KB
1K SLoC
inflate
用 Rust 编写的 DEFLATE 解码器。
此库提供对使用 DEFLATE 算法压缩的数据进行解压缩的功能,无论是否带有 zlib 头部/尾部。
示例
获取包含解压缩字节的 std::Vec<u8>
的最简单方法是使用 inflate::inflate_bytes
或 inflate::inflate_bytes_zlib
(取决于编码数据是否具有 zlib 头部和尾部)。以下示例解码 DEFLATE 编码字符串 "Hello, world" 并打印它
use inflate::inflate_bytes;
use std::str::from_utf8;
let encoded = [243, 72, 205, 201, 201, 215, 81, 40, 207, 47, 202, 73, 1, 0];
let decoded = inflate_bytes(&encoded).unwrap();
println!("{}", from_utf8(&decoded).unwrap()); // prints "Hello, world"
如果您需要更多灵活性,则库还提供了 std::io::Writer
的实现,在 inflate::writer
中。以下是一个使用 inflate::writer::InflateWriter
解码 DEFLATE 编码字符串 "Hello, world" 的示例
use inflate::InflateWriter;
use std::io::Write;
use std::str::from_utf8;
let encoded = [243, 72, 205, 201, 201, 215, 81, 40, 207, 47, 202, 73, 1, 0];
let mut decoder = InflateWriter::new(Vec::new());
decoder.write(&encoded).unwrap();
let decoded = decoder.finish().unwrap();
println!("{}", from_utf8(&decoded).unwrap()); // prints "Hello, world"
最后,如果您需要更多灵活性,或者只想依赖 core
,则可以使用 inflate::InflateStream
API。以下示例解码 DEFLATE 编码字节数组
use inflate::InflateStream;
let data = [0x73, 0x49, 0x4d, 0xcb, 0x49, 0x2c, 0x49, 0x55, 0x00, 0x11, 0x00];
let mut inflater = InflateStream::new();
let mut out = Vec::<u8>::new();
let mut n = 0;
while n < data.len() {
let res = inflater.update(&data[n..]);
if let Ok((num_bytes_read, result)) = res {
n += num_bytes_read;
out.extend(result.iter().cloned());
} else {
res.unwrap();
}
}