Почему количество прочитанных байтов отличается в каждом случае? - PullRequest
0 голосов
/ 06 февраля 2019

Фрагмент пытается подсчитать количество прочитанных байтов в следующем sample.txt

sample.txt

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

case 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

Я не могу понять, почему два случая дают разные результаты.Любая помощь с благодарностью

1 Ответ

0 голосов
/ 06 февраля 2019

Из документов для BufRead.lines:

Итератор, возвращенный из этой функции, выдаст экземпляры io::Result<String>.Каждая возвращаемая строка будет не иметь байт новой строки.

Ваш счет выключен на 3, потому что у вас есть 3 строки в данных, а символы новой строки неучитывается во втором примере.

...