gpt4 book ai didi

rust - 直接从 Rust 的阅读器写入

转载 作者:行者123 更新时间:2023-11-29 08:03:54 24 4
gpt4 key购买 nike

如何在 Rust 中将数据从读取器流式传输到写入器?

我的最终目标实际上是以流方式写出一些 gzip 压缩数据。似乎我缺少的是一个函数,用于迭代读取器的数据并将其写入文件。

使用 read_to_string 等可以轻松完成此任务。但我的要求是流式传输数据以降低内存使用量。我一直没能找到一种不会分配大量缓冲区的简单方法。

use std::io;
use std::io::prelude::*;
use std::io::{BufReader};
use std::fs::File;
use flate2::read::{GzEncoder};
use flate2::{Compression};

pub fn gzipped<R: Read>(file: String, stream: R) -> io::Result<()> {
let file = File::create(file)?;
let gz = BufReader::new(GzEncoder::new(stream, Compression::Default));
read_write(gz, file)
}

pub fn read_write<R: BufRead, W: Write>(mut r: R, mut w: W) -> io::Result<()> {
// ?
}

最佳答案

你的 read_write函数听起来很像 io::copy .所以这将是

pub fn gzipped<R: Read>(file: String, stream: R) -> io::Result<u64> {
let mut file = File::create(file)?;
let mut gz = BufReader::new(GzEncoder::new(stream, Compression::Default));
io::copy(&mut gz, &mut file)
}

唯一的区别是 io::copy获取可变引用,并返回 Result<u64> .

关于rust - 直接从 Rust 的阅读器写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533659/

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