Метод take
Метод take класса Read создаёт адаптер Take,
который ограничивает чтение из исходного потока заданным
количеством байт. Параметром метод принимает число -
максимальное количество байт, которое разрешено прочитать
из потока. После исчерпания лимита адаптер возвращает
Ok(0), сигнализируя о конце данных.
Синтаксис
reader.take(limit)
Пример
Давайте ограничим чтение из потока "abcde" тремя
байтами и прочитаем результат в строку:
use std::io::Read;
fn main()
{
let data = "abcde".as_bytes();
let mut reader = data.take(3);
let mut res = String::new();
reader.read_to_string(&mut res).unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abc"
Пример
Если лимит превышает размер потока, будет прочитано
всё содержимое. Давайте зададим лимит 10 для строки
"abcde":
use std::io::Read;
fn main()
{
let data = "abcde".as_bytes();
let mut reader = data.take(10);
let mut res = String::new();
reader.read_to_string(&mut res).unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте проверим, сколько байт осталось доступно после
чтения, с помощью метода limit адаптера Take:
use std::io::Read;
fn main()
{
let data = "abcde".as_bytes();
let mut reader = data.take(3);
let mut buf = [0u8; 5];
reader.read(&mut buf).unwrap();
println!("{}", reader.limit());
}
Результат выполнения кода:
0
Смотрите также
-
метод
read,
который читает данные из потока в буфер -
метод
read_to_string,
который читает весь поток в строку -
метод
read_to_end,
который читает весь поток в вектор байт -
типаж
Read,
который представляет источник данных для чтения