Класс BufReader
Класс BufReader представляет собой обёртку
вокруг любого типа, реализующего трейт Read,
и добавляет внутренний буфер для более эффективного
чтения данных. Вместо множества мелких операций
чтения BufReader выполняет крупные блочные
чтения, что снижает накладные расходы на системные
вызовы. Параметром конструктор new принимает
источник данных, реализующий трейт Read.
Размер буфера по умолчанию составляет 8 килобайт.
Класс BufReader реализует трейт BufRead,
который предоставляет дополнительные методы, такие
как read_line и lines, недоступные
для обычного Read.
Синтаксис
use std::io::BufReader;
let reader = BufReader::new(inner);
Пример
Давайте создадим BufReader вокруг среза
байтов и прочитаем из него данные:
use std::io::BufReader;
use std::io::Read;
fn main()
{
let data = b"abcde";
let mut reader = BufReader::new(&data[..]);
let mut buffer = String::new();
reader.read_to_string(&mut buffer).unwrap();
println!("{}", buffer);
}
Результат выполнения кода:
"abcde"
Пример
Давайте воспользуемся методом read_line
из трейта BufRead для построчного чтения:
use std::io::BufReader;
use std::io::BufRead;
fn main()
{
let data = b"12345\nabcde\n";
let reader = BufReader::new(&data[..]);
for line in reader.lines()
{
let line = line.unwrap();
println!("{}", line);
}
}
Результат выполнения кода:
"12345"
"abcde"
Пример
Давайте создадим BufReader с явно
заданным размером буфера:
use std::io::BufReader;
use std::io::BufRead;
fn main()
{
let data = b"abcde";
let mut reader = BufReader::with_capacity(1024, &data[..]);
let mut buffer = String::new();
reader.read_line(&mut buffer).unwrap();
println!("{}", buffer);
}
Результат выполнения кода:
"abcde"