作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 hyper 下载 XZ 文件,我想通过从每个传入的 Chunk
中尽可能多地提取,以解压缩的形式将其保存到磁盘。并将结果立即写入磁盘,而不是先下载整个文件然后解压缩。
有 xz2实现 XZ 格式的 crate 。然而,它的 XzDecoder
似乎不支持 Python-like decompressobj
模型,其中调用者重复提供部分输入并获得部分输出。
相反,XzDecoder
通过 Read
接收输入字节参数,我不确定如何将这两个东西粘合在一起。有没有办法喂一个Response
到 XzDecoder
?
到目前为止我找到的唯一线索是这个 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/
我是一名优秀的程序员,十分优秀!