#zip-archive #stream #download #multipart #unpack #unpacking #deflate

stream-unpack

一个用于解压缩存档的小型库

5个版本 (2个稳定版)

1.0.1 2024年1月22日
1.0.0 2024年1月21日
0.1.2 2024年1月15日
0.1.1 2024年1月15日
0.1.0 2024年1月12日

压缩类别中排名281

GPL-3.0许可证

46KB
930

stream-unpacker

一个用于解压缩存档的小型库(例如,同时下载和解压缩)。目前支持单文件、多部分和伪多部分(单个存档分割成多个文件)ZIP,支持DEFLATE压缩和解压缩。此库要求您首先获取要解压缩的ZIP的中心目录,并提供方便实现此操作的实用工具。

示例

请查看此仓库中的完整示例。

let archive = fs::read("archive.zip").unwrap();

let central_directory = read_cd::from_provider(
    vec![archive.len()],
    false, // Determines whether to interpret it as a fake multipart (cut) archive
    |pos, length| Ok(archive[(pos.offset)..(pos.offset + length)].to_owned())
).unwrap();

let mut unpacker = ZipUnpacker::new(central_directory.sort(), vec![archive.len()]);
unpacker.set_callback(|data| {
    println!("Got data: {data:?}");
    // Do something useful with data. See full examples

    Ok(())
});

// You can provide an arbitrary amount of bytes at a time
// Make sure to advance the buffer exactly the amount of bytes returned
// All split archives (multipart and fake multipart) should be treated
// as a continuous stream of bytes from the first one to the last one
let (advanced, reached_end) = unpacker.update(archive).unwrap();

println!("Done!");

许可证:GPL v3

依赖

~0.4–1MB
~21K SLoC