首页 > 解决方案 > 为什么每种情况下读取的字节数不同?

问题描述

Snippet 正在尝试计算以下读取的字节数sample.txt

样本.txt

one two three four five six
seven eight nine ten eleven twelve
thirteen fourteen fifteen sixteen
%

情况1:

let file = File::open(fname)?;
let mut reader = BufReader::new(&file);
let mut buffer: Vec<u8> = vec![];
let num_bytes = reader.read_until(b'%', &mut buffer);
//println!("{}", String::from_utf8(buffer).unwrap());
println!("read_bytes: {}", num_bytes.unwrap());

read_bytes: 101

案例2:

let file = File::open(fname)?;
let mut reader = BufReader::new(&file);
let mut num_bytes: u32 = 0;
for readline in reader.lines() {
    if let Ok(line) = readline {
        //println!("{}", line);
        let bytes = line.as_bytes();
        num_bytes += bytes.len() as u32;
        if bytes == b"%" {
            break;
        }
    }
}
println!("read_bytes: {}", num_bytes)

read_bytes: 98

我似乎无法弄清楚为什么这两种情况会输出不同的结果。任何帮助表示感谢

标签: rustiterator

解决方案


从文档中BufRead.lines

从这个函数返回的迭代器将产生 io::Result<String>. 返回的每个字符串都 没有 换行字节。

您的计数减少了 3,因为数据中有 3 行,并且在第二个示例中没有计算换行符。


推荐阅读