直接从Rust中的读者那里写

Gre*_*ber 2 rust

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

我的最终目标实际上是以流方式写出一些压缩数据。似乎我缺少的是一个对读取器中的数据进行迭代并将其写出到文件中的函数。

使用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<()> {
  // ?
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*son 5

您的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)
}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是io::copy采用可变引用,然后返回Result<u64>