РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
793 of 1245 menu

Метод fill_buf

Метод fill_buf возвращает ссылку на внутренний буфер читателя в виде среза байтов &[u8]. Метод не опустошает буфер и не потребляет данные - прочитанные байты остаются в буфере до следующего вызова метода consume. Параметров метод не принимает.

Метод возвращает Result<&[u8], Error>. Если буфер пуст, возвращается пустой срез &[], что сигнализирует о достижении конца потока. Метод доступен для всех типов, реализующих трейт BufRead, например для BufReader или StdinLock.

Синтаксис

buf_read.fill_buf()

Пример

Давайте прочитаем данные из BufReader с помощью метода fill_buf и выведем их на экран:

use std::io::BufRead; use std::io::BufReader; fn main() { let data = "abcde".as_bytes(); let mut reader = BufReader::new(data); let buf = reader.fill_buf().unwrap(); println!("{:?}", buf); }

Результат выполнения кода:

[97, 98, 99, 100, 101]

Пример

Давайте прочитаем данные в цикле, используя метод fill_buf вместе с методом consume для продвижения по потоку:

use std::io::BufRead; use std::io::BufReader; fn main() { let data = "12345".as_bytes(); let mut reader = BufReader::new(data); let mut res = Vec::new(); loop { let buf = reader.fill_buf().unwrap(); if buf.is_empty() { break; } let len = buf.len(); res.extend_from_slice(buf); reader.consume(len); } println!("{:?}", res); }

Результат выполнения кода:

[49, 50, 51, 52, 53]

Пример

Давайте проверим, что метод fill_buf не потребляет данные и при повторном вызове возвращает тот же срез:

use std::io::BufRead; use std::io::BufReader; fn main() { let data = "abcde".as_bytes(); let mut reader = BufReader::new(data); let buf1 = reader.fill_buf().unwrap(); let buf2 = reader.fill_buf().unwrap(); println!("{}", buf1 == buf2); }

Результат выполнения кода:

true

Смотрите также

  • метод read_line,
    который читает строку из буфера
  • метод lines,
    который возвращает итератор по строкам
  • структура BufReader,
    которая реализует буферизованное чтение
  • трейт BufRead,
    который определяет методы буферизованного чтения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить