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