如何在Rust中高效地逐行读取文本文件?

1,052 阅读1分钟

[

Jerry Wang

](medium.com/@cafefullst…)

王杰瑞

关注

6月19日

-

2分钟阅读

[

拯救

](medium.com/m/signin?ac…)

如何在Rust中有效地逐行读取一个文本文件?

如何打开一个文件进行阅读?

在Rust中,对文件系统中一个开放文件的引用是由结构std::fs::File 来表示的。我们可以使用File::open 方法来打开一个现有的文件进行阅读。

pub fn open<P: AsRef<Path>>(path: P) -> Result<File>

该方法以一个路径(任何可以借用&Path ,即AsRef<Path> ,确切地说)为参数,并返回一个io::Result<File>

如何有效地逐行读取一个文件?

为了提高效率,读取器可以是缓冲,这意味着它们有一大块内存(缓冲区),在内存中保存一些输入数据。这就节省了系统调用。在Rust中,BufReadRead 的一种类型,它有一个内部缓冲区,允许它执行额外的读取方式。注意,File 不是自动缓冲的,因为File 只实现了Read ,而没有实现BufRead 。然而,为File 创建一个缓冲的阅读器是很容易的。

BufReader::new(file);

最后,我们可以使用std::io::BufRead::lines() 方法来返回这个缓冲阅读器的行的迭代器。

BufReader::new(file).lines();

把所有东西放在一起

现在我们可以很容易地写一个函数,有效地逐行读取一个文本文件。

use std::fs::File;use std::io::{self, BufRead, BufReader, Lines};use std::path::Path;

提高编码水平

感谢你成为我们社区的一员!更多的内容在Level Up Coding出版物中。
关注。Twitter,LinkedIn,Newsletter
Level Up正在改变科技招聘的方式 ➡️ 加入我们的人才集体