MST
星途 面试题库

面试题:Rust中BufReader和BufWriter基础应用

请描述在Rust中使用BufReader和BufWriter分别用于什么场景,并且编写一个简单示例,从文件中读取数据并写入到另一个文件,使用BufReader和BufWriter来提高性能。
26.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

BufReader场景

BufReader 用于从输入流(如文件、网络套接字等)中高效读取数据。它通过内部缓冲区减少实际的I/O操作次数,适用于需要逐行或逐块读取数据的场景,因为每次读取操作先从缓冲区获取数据,只有当缓冲区数据不足时才进行实际的I/O读取。

BufWriter场景

BufWriter 用于高效地向输出流(如文件、网络套接字等)写入数据。它同样通过内部缓冲区,将多次写入操作先缓存起来,直到缓冲区满或者显式调用 flush 方法时,才将缓冲区的数据一次性写入到实际的输出流,减少I/O操作次数,提高写入性能。

示例代码

use std::fs::File;
use std::io::{BufRead, BufReader, BufWriter, Write};

fn main() -> std::io::Result<()> {
    let input_file = File::open("input.txt")?;
    let output_file = File::create("output.txt")?;

    let reader = BufReader::new(input_file);
    let mut writer = BufWriter::new(output_file);

    for line in reader.lines() {
        let line = line?;
        writeln!(writer, "{}", line)?;
    }

    writer.flush()?;

    Ok(())
}

在上述代码中:

  1. 首先打开输入文件 input.txt 和创建输出文件 output.txt
  2. 使用 BufReader 包装输入文件,这样可以逐行高效读取数据。
  3. 使用 BufWriter 包装输出文件,每次 writeln! 操作先将数据写入缓冲区。
  4. 循环读取输入文件的每一行,并写入到输出文件的缓冲区。
  5. 最后调用 flush 方法,将缓冲区的数据真正写入到输出文件。