Rust - как прочитать несколько байт из буффера?

Задача: нужно получить первую строку из файла, либо первые n-байт из файла. Можно это сделать без цикла из буффера? Смысл - получить первую строку, в ней будет дата, на основании анализа этой даты уже либо выполнять цикл и читать весь буффер или не выполнять цикл.

let file_log = PathBuf::from(r"./log");
let input = File::open(file_log).expect("Should have been able to read the file");
let f = BufReader::new(input); 

Ответы (1 шт):

Автор решения: Be3y4uu_K0T

Используйте вначале take, а затем уже read_line. Метод take создаст объект Take, но не будет брать явно из буфера данные, просто установит предел. Уже метод read_line обратиться и возьмет всю строчку или до установленного предела.

Пример:

use std::{
    fs::File,
    io::{BufRead, BufReader, Read, Result},
};

fn main() -> Result<()> {
    let file = File::open(r"./log")?;
    let buffer = BufReader::new(file);
    let mut line = String::new();
    let limit = 64;
    // Метод `read_line` доступен, если `take` создан из объекта,
    // реализующего BufReader [1]
    // А также нужно `use std::io::BufRead;`, чтобы метод был виден
    let _ = buffer.take(limit).read_line(&mut line)?;
    println!("{line}");
    Ok(())
}
→ Ссылка