逐行读取文件(不是utf-8)?

时间:2017-12-30 13:43:21

标签: rust

如果文件不是std::io::Filestd::io::BufReader的utf-8编码,是否可以逐行读取文件?

我看std::io::Lines并返回Result<String>,所以 我担心,我是否实施了自己的BufReader同样的做法,但返回Vec<u8>,或者我可以某种方式重用std::io::BufReader

1 个答案:

答案 0 :(得分:3)

您不必重新实现BufReader本身,它提供了您的用例所需的方法read_until

fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize>

您提供自己的Vec<u8>,文件内容将被追加,直到遇到byte(0x0A为LF)。

有几个潜在的问题:

  • 缓冲区不仅可以以LF字节结束,还可以以CR LF序列结束,
  • 您可以在后续通话之间清除buf

简单的while let Ok(_) = reader.read_until(0x0A as u8, buffer)可让您轻松阅读文件。

您可以考虑实现一个std::io::Lines等效项,它可以从编码转换为UTF-8,以提供一个不错的API,但它会产生性能成本。