文件和IO
Rust 通过在std::io
模块中的几个核心特性(trait)来定义 I/O 功能,使得 I/O 操作可以在不同类型的数据流上以统一的方式执行:
Read
特性:用于定义从数据源读取数据的功能。实现了Read
的类型可以从底层数据源(如文件、网络、内存缓冲区等)读取数据。Write
特性:用于定义向数据接收器写入数据的功能。实现了Write
的类型可以向各种输出流(如文件、网络、内存缓冲区等)写入数据。Seek
特性:用于在支持随机访问的数据流中移动读写位置。BufRead
特性:基于Read
,为缓冲的读操作提供接口。
文件读写
下面这个例子是一个典型的Rust读写文件程序:
- 通过
create
或open
打开文件,利用文件的Drop方法自动释放。 - 通过
BufWriter
和BufReader
包装,给读写添加缓冲。 - 引入
Write
和Read
特性,调用相关方法完成读写。 - 使用
?
来处理可能发生的错误。
use std::fs::File;
use std::io::{BufReader, BufWriter, Write, Read};
fn main() -> std::io::Result<()> {
// Buffered writing
let file = File::create("output.txt")?;
let mut writer = BufWriter::new(file);
writer.write_all(b"Hello, buffered world!")?;
// Buffered reading
let file = File::open("output.txt")?;
let mut reader = BufReader::new(file);
let mut contents = String::new();
reader.read_to_string(&mut contents)?;
println!("File contents: {}", contents);
Ok(())
}