是否有可能读取线文件中的行,如果不是以UTF-8编码用std::io::File
和std::io::BufReader
?
我看std::io::Lines
并返回Result<String>
,所以我担心,我有没有实现自己的BufReader
做同样的,但返回Vec<u8>
代替,或者我可以重复使用std::io::BufReader
以某种方式?
是否有可能读取线文件中的行,如果不是以UTF-8编码用std::io::File
和std::io::BufReader
?
我看std::io::Lines
并返回Result<String>
,所以我担心,我有没有实现自己的BufReader
做同样的,但返回Vec<u8>
代替,或者我可以重复使用std::io::BufReader
以某种方式?
你不必重新实现BufReader
本身,它到底提供了你需要为你的用例方法read_until
:
fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize>
你提供你自己的Vec<u8>
和文件的内容将被追加到byte
遇到字符(0x0A是LF)。
有几个潜在的陷阱:
buf
后续调用之间。 一个简单while let Ok(_) = reader.read_until(0x0A as u8, buffer)
应该让你读你的文件很轻松了。
您可以考虑实施std::io::Lines
相当于从编码转换为UTF-8提供了一个很好的API,但它会产生性能成本。