面试题答案
一键面试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(())
}
在上述代码中:
- 首先打开输入文件
input.txt
和创建输出文件output.txt
。 - 使用
BufReader
包装输入文件,这样可以逐行高效读取数据。 - 使用
BufWriter
包装输出文件,每次writeln!
操作先将数据写入缓冲区。 - 循环读取输入文件的每一行,并写入到输出文件的缓冲区。
- 最后调用
flush
方法,将缓冲区的数据真正写入到输出文件。