Метод chain
Метод chain объединяет текущий источник чтения
с другим источником чтения в один непрерывный поток.
Сначала данные читаются из первого источника, а после
его исчерпания - из второго. Параметром метод принимает
второй источник чтения, который нужно присоединить.
Возвращается новый объект Chain, реализующий
трейт Read.
Синтаксис
reader.chain(other)
Пример
Давайте объединим два среза байтов в один поток и прочитаем результат в строку:
use std::io::Read;
fn main()
{
let first = &b"abcde"[..];
let second = &b"12345"[..];
let mut chained = first.chain(second);
let mut res = String::new();
chained.read_to_string(&mut res).unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde12345"
Пример
Давайте прочитаем объединённый поток по частям
с помощью метода read:
use std::io::Read;
fn main()
{
let first = &b"abcde"[..];
let second = &b"12345"[..];
let mut chained = first.chain(second);
let mut buf = [0u8; 4];
let mut res = Vec::new();
loop
{
let n = chained.read(&mut buf).unwrap();
if n == 0
{
break;
}
res.extend_from_slice(&buf[..n]);
}
println!("{:?}", String::from_utf8(res).unwrap());
}
Результат выполнения кода:
"abcde12345"
Пример
Давайте объединим пустой источник с непустым и убедимся, что чтение работает корректно:
use std::io::Read;
fn main()
{
let first = &b""[..];
let second = &b"12345"[..];
let mut chained = first.chain(second);
let mut res = String::new();
chained.read_to_string(&mut res).unwrap();
println!("{}", res);
}
Результат выполнения кода:
"12345"
Смотрите также
-
метод
read,
который читает данные из источника в буфер -
метод
read_to_string,
который читает весь источник в строку -
метод
take,
который ограничивает чтение заданным количеством байтов -
метод
bytes,
который возвращает итератор по байтам источника