Spec-Zone.ru › Tokio

Трейт AsyncBufRead

pub trait AsyncBufRead: AsyncRead {
    // Required methods
    fn poll_fill_buf(
        self: Pin<&mut Self>,
        cx: &mut Context<'_>,
    ) -> Poll<Result<&[u8]>>;
    fn consume(self: Pin<&mut Self>, amt: usize);
}

Асинхронно считывает байты.

Этот трейт аналогичен std::io::BufRead, но интегрируется с системой асинхронных задач. В частности, метод poll_fill_buf, в отличие от BufRead::fill_buf, автоматически ставит текущую задачу в очередь на пробуждение и возвращает управление, если данные ещё недоступны, вместо того чтобы блокировать вызывающий поток.

Утилиты для работы со значениями AsyncBufRead предоставляются трейтам AsyncBufReadExt.

Обязательные методы

fn poll_fill_buf( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

Пытается вернуть содержимое внутреннего буфера, заполняя его дополнительными данными из внутреннего средства чтения, если буфер пуст.

В случае успеха возвращает Poll::Ready(Ok(buf)).

Если данные для чтения недоступны, метод возвращает Poll::Pending и организует уведомление текущей задачи (через cx.waker().wake_by_ref()), когда объект станет доступен для чтения или будет закрыт.

Эта функция представляет собой низкоуровневый вызов. Для правильной работы её необходимо использовать вместе с методом consume. При вызове этого метода содержимое не считается «прочитанным»: последующий вызов poll_read может вернуть то же содержимое. Поэтому необходимо вызвать consume, указав количество байтов, потреблённых из этого буфера, чтобы байты не возвращались повторно.

Пустой возвращённый буфер указывает на то, что поток достиг EOF.

fn consume(self: Pin<&mut Self>, amt: usize)

Сообщает этому буферу, что из него было потреблено amt байт, поэтому их больше не следует возвращать при вызовах poll_read.

Эта функция представляет собой низкоуровневый вызов. Для правильной работы её необходимо использовать вместе с методом poll_fill_buf. Функция не выполняет ввод-вывод, а лишь сообщает этому объекту, что некоторое количество байтов из его буфера, возвращённого методом poll_fill_buf, было потреблено и больше не должно возвращаться. Поэтому эта функция может вести себя неожиданно, если перед её вызовом не был вызван метод poll_fill_buf.

Значение amt должно быть <= количества байтов в буфере, возвращённом методом poll_fill_buf.

Совместимость с dyn

Этот трейт является совместимым с dyn.

В более старых версиях Rust совместимость с dyn называлась «безопасностью объектов».

Реализации для сторонних типов

impl AsyncBufRead for &[u8]

fn poll_fill_buf( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

fn consume(self: Pin<&mut Self>, amt: usize)

impl<P> AsyncBufRead for Pin<P>
where P: DerefMut, P::Target: AsyncBufRead,

fn poll_fill_buf( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

fn consume(self: Pin<&mut Self>, amt: usize)

impl<T: ?Sized + AsyncBufRead + Unpin> AsyncBufRead for &mut T

fn poll_fill_buf( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

fn consume(self: Pin<&mut Self>, amt: usize)

impl<T: ?Sized + AsyncBufRead + Unpin> AsyncBufRead for Box<T>

fn poll_fill_buf( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

fn consume(self: Pin<&mut Self>, amt: usize)

impl<T: AsRef<[u8]> + Unpin> AsyncBufRead for Cursor<T>

fn poll_fill_buf( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll<Result<&[u8]>>

fn consume(self: Pin<&mut Self>, amt: usize)

Реализаторы

impl AsyncBufRead for Empty

Доступно только при включённой функции крейта io-util.

impl<R, W> AsyncBufRead for Join<R, W>
where R: AsyncBufRead,

Доступно только при включённой функции крейта io-util.

impl<R: AsyncBufRead> AsyncBufRead for Take<R>

Доступно только при включённой функции крейта io-util.

impl<R: AsyncRead> AsyncBufRead for BufReader<R>

Доступно только при включённой функции крейта io-util.

impl<RW: AsyncRead + AsyncWrite> AsyncBufRead for BufStream<RW>

Доступно только при включённой функции крейта io-util.

impl<T, U> AsyncBufRead for Chain<T, U>
where T: AsyncBufRead, U: AsyncBufRead,

Доступно только при включённой функции крейта io-util.

impl<W: AsyncWrite + AsyncBufRead> AsyncBufRead for BufWriter<W>

Доступно только при включённой функции крейта io-util.

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/io/trait.AsyncBufRead.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API