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

问题描述 投票:1回答:1

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

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

rust
1个回答
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,虽然它会有性能成本。

© www.soinside.com 2019 - 2024. All rights reserved.