Трейт Read
Трейт Read представляет собой абстракцию над источником
байтов, из которого можно читать данные. Он определяет
базовый метод read, принимающий изменяемый срез
байтов &mut [u8], в который записываются прочитанные
данные, и возвращающий количество прочитанных байтов
Result<usize, io::Error>. На основе этого метода
трейт предоставляет множество удобных методов:
read_to_string, read_to_end, read_exact,
bytes, chain, take и другие.
Параметром метод read принимает буфер, в который
будут записаны прочитанные байты.
Синтаксис
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
Пример
Давайте прочитаем данные из среза байтов с помощью метода
read:
use std::io::Read;
fn main()
{
let data: &[u8] = b"abcde";
let mut reader = data;
let mut buf = [0u8; 5];
let n = reader.read(&mut buf).unwrap();
println!("{}", n);
println!("{:?}", std::str::from_utf8(&buf).unwrap());
}
Результат выполнения кода:
5
"abcde"
Пример
Давайте прочитаем всё содержимое в строку с помощью
метода read_to_string:
use std::io::Read;
fn main()
{
let data: &[u8] = b"abcde";
let mut reader = data;
let mut res = String::new();
reader.read_to_string(&mut res).unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте прочитаем все байты в вектор с помощью метода
read_to_end:
use std::io::Read;
fn main()
{
let data: &[u8] = b"12345";
let mut reader = data;
let mut res: Vec<u8> = Vec::new();
reader.read_to_end(&mut res).unwrap();
println!("{:?}", res);
}
Результат выполнения кода:
[49, 50, 51, 52, 53]
Пример
Давайте прочитаем ровно 3 байта с помощью метода
read_exact:
use std::io::Read;
fn main()
{
let data: &[u8] = b"abcde";
let mut reader = data;
let mut buf = [0u8; 3];
reader.read_exact(&mut buf).unwrap();
println!("{:?}", std::str::from_utf8(&buf).unwrap());
}
Результат выполнения кода:
"abc"
Смотрите также
-
метод
read,
который читает байты в указанный буфер -
метод
read_to_string,
который читает всё содержимое в строку -
метод
read_to_end,
который читает все байты в вектор -
метод
bytes,
который возвращает итератор по байтам источника