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

Метод 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,
    который возвращает итератор по байтам источника
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить