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 压缩

Download history 24483/week @ 2024-03-14 19484/week @ 2024-03-21 49774/week @ 2024-03-28 19674/week @ 2024-04-04 23181/week @ 2024-04-11 22205/week @ 2024-04-18 23586/week @ 2024-04-25 17974/week @ 2024-05-02 18002/week @ 2024-05-09 32116/week @ 2024-05-16 29081/week @ 2024-05-23 23353/week @ 2024-05-30 24718/week @ 2024-06-06 20991/week @ 2024-06-13 21215/week @ 2024-06-20 19109/week @ 2024-06-27

89,462 个月下载
用于 214 个包 (39 个直接使用)

MIT 许可

66KB
1K SLoC

inflate

用 Rust 编写的 DEFLATE 解码器。

此库提供对使用 DEFLATE 算法压缩的数据进行解压缩的功能,无论是否带有 zlib 头部/尾部。

示例

获取包含解压缩字节的 std::Vec<u8> 的最简单方法是使用 inflate::inflate_bytesinflate::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();
    }
}

依赖项