gpt4 book ai didi

rust - 如何从 hyper::Response 中解压 XZ 数据?

转载 作者:行者123 更新时间:2023-11-29 08:07:14 25 4
gpt4 key购买 nike

我正在使用 hyper 下载 XZ 文件,我想通过从每个传入的 Chunk 中尽可能多地提取,以解压缩的形式将其保存到磁盘。并将结果立即写入磁盘,而不是先下载整个文件然后解压缩。

xz2实现 XZ 格式的 crate 。然而,它的 XzDecoder似乎不支持 Python-like decompressobj模型,其中调用者重复提供部分输入并获得部分输出。

相反,XzDecoder 通过 Read 接收输入字节参数,我不确定如何将这两个东西粘合在一起。有没有办法喂一个ResponseXzDecoder?

到目前为止我找到的唯一线索是这个 issue ,其中包含对私有(private) ReadableChunks 的引用类型,理论上我可以在我的代码中复制它 - 但也许有更简单的方法?

最佳答案

XzDecoder does not seem to support a Python-like decompressobj model, where a caller repeatedly feeds partial input and gets partial output

xz2::stream::Stream这正是你想要的。非常粗糙的未经测试的代码,需要适当的错误处理等,但我希望你能明白:

fn process(body: hyper::body::Body) {
let mut decoder = xz2::stream::Stream::new_stream_decoder(1000, 0).unwrap();
body.for_each(|chunk| {
let mut buf: Vec<u8> = Vec::new();
if let Ok(_) = decoder.process_vec(&chunk, &mut buf, Action::Run) {
// write buf to disk
}
Ok(())
}).wait().unwrap();
}

关于rust - 如何从 hyper::Response 中解压 XZ 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com