Метод 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,
который определяет интерфейс чтения данных