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

Метод read

Метод read класса Read читает данные из источника в переданный буфер и возвращает количество фактически прочитанных байтов. Параметром метод принимает изменяемый срез байтов &mut [u8], в который будут записаны данные. Возвращаемым значением является Result<usize> - количество прочитанных байтов или ошибка. Если возвращается Ok(0), это означает, что источник данных исчерпан.

Синтаксис

read(&mut self, buf: &mut [u8]) -> Result<usize>

Пример

Давайте прочитаем данные из среза байтов "abcde" в буфер и выведем количество прочитанных байтов и их содержимое:

use std::io::Read; fn main() { let data: &[u8] = b"abcde"; let mut buf = [0u8; 5]; let mut reader = data; let res = reader.read(&mut buf).unwrap(); println!("{}", res); println!("{:?}", std::str::from_utf8(&buf).unwrap()); }

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

5 "abcde"

Пример

Давайте прочитаем данные в буфер, размер которого меньше объёма источника, и посмотрим, сколько байтов было прочитано:

use std::io::Read; fn main() { let data: &[u8] = b"abcde"; let mut buf = [0u8; 3]; let mut reader = data; let res = reader.read(&mut buf).unwrap(); println!("{}", res); println!("{:?}", std::str::from_utf8(&buf).unwrap()); }

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

3 "abc"

Пример

Давайте последовательно прочитаем все данные из источника в цикле, пока метод не вернёт Ok(0):

use std::io::Read; fn main() { let data: &[u8] = b"abcde"; let mut reader = data; let mut result = Vec::new(); let mut buf = [0u8; 2]; loop { let n = reader.read(&mut buf).unwrap(); if n == 0 { break; } result.extend_from_slice(&buf[..n]); } println!("{:?}", std::str::from_utf8(&result).unwrap()); }

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

"abcde"

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

  • метод read_to_string,
    который читает всё содержимое в строку
  • метод read_to_end,
    который читает все байты до конца источника
  • метод read_exact,
    который читает ровно указанное количество байтов
  • типаж Read,
    который определяет интерфейс чтения данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить