Spec-Zone.ru › Tokio

Трейт AsyncSeek

pub trait AsyncSeek {
    // Required methods
    fn start_seek(self: Pin<&mut Self>, position: SeekFrom) -> Result<()>;
    fn poll_complete(
        self: Pin<&mut Self>,
        cx: &mut Context<'_>,
    ) -> Poll<Result<u64>>;
}

Асинхронный поиск байтов.

Этот трейт аналогичен трейту std::io::Seek, но интегрируется с системой асинхронных задач. В частности, метод start_seek, в отличие от Seek::seek, не блокирует вызывающий поток.

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

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

fn start_seek(self: Pin<&mut Self>, position: SeekFrom) -> Result<()>

Пытается выполнить поиск по смещению в байтах в потоке.

Поиск за концом потока разрешён, но поведение определяется реализацией.

Если эта функция завершается успешно, задание отправлено. Чтобы узнать, когда оно завершится, вызовите poll_complete.

Ошибки

Эта функция может вернуть io::ErrorKind::Other, если уже выполняется другой поиск. Чтобы избежать этого, рекомендуется перед каждым вызовом start_seek вызывать poll_complete, чтобы убедиться, что все ожидающие поисковые операции завершены.

fn poll_complete( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<u64>>

Ожидает завершения операции поиска.

Если операция поиска завершилась успешно, этот метод возвращает новую позицию относительно начала потока. Эту позицию впоследствии можно использовать с SeekFrom::Start.

На позицию, возвращаемую этим методом, можно полагаться только сразу после вызова start_seek. Если после вызова start_seek вы изменили позицию, например, чтением или записью, не определено, учитывает ли возвращаемая позиция это изменение. Аналогично, если start_seek никогда не вызывался, не определено, возвращает ли poll_complete фактическую позицию или какое-либо другое условное значение (например, 0).

Ошибки

Поиск по отрицательному смещению считается ошибкой.

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

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

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

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

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

fn start_seek(self: Pin<&mut Self>, pos: SeekFrom) -> Result<()>

fn poll_complete( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<u64>>

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

fn start_seek(self: Pin<&mut Self>, pos: SeekFrom) -> Result<()>

fn poll_complete( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<u64>>

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

fn start_seek(self: Pin<&mut Self>, pos: SeekFrom) -> Result<()>

fn poll_complete( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<u64>>

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

fn start_seek(self: Pin<&mut Self>, pos: SeekFrom) -> Result<()>

fn poll_complete(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<u64>>

Реализаторы

impl AsyncSeek for Empty

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

impl AsyncSeek for File

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

impl<R: AsyncRead + AsyncSeek> AsyncSeek for BufReader<R>

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

Перемещается к смещению в байтах во внутреннем средстве чтения.

Позиция, используемая для перемещения с помощью SeekFrom::Current(_), — это позиция, в которой находилось бы внутреннее средство чтения, если бы у BufReader не было внутреннего буфера.

При перемещении внутренний буфер всегда отбрасывается, даже если позиция перемещения в противном случае находилась бы в его пределах. Это гарантирует, что вызов .into_inner() сразу после перемещения вернёт внутреннее средство чтения в ту же позицию.

Подробнее см. в разделе AsyncSeek.

Примечание: В редком случае, когда выполняется перемещение с помощью SeekFrom::Current(n), при котором n минус длина внутреннего буфера выходит за пределы i64, вместо одного перемещения будут выполнены два. Если второе перемещение вернёт Err, внутреннее средство чтения останется в той же позиции, в которой оно находилось бы при вызове seek с SeekFrom::Current(0).

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

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

Перемещается к смещению в байтах во внутреннем потоке.

Позиция, используемая для перемещения с помощью SeekFrom::Current(_), — это позиция, в которой находился бы внутренний поток, если бы у BufStream не было внутреннего буфера.

При перемещении внутренний буфер всегда отбрасывается, даже если позиция перемещения в противном случае находилась бы в его пределах. Это гарантирует, что вызов .into_inner() сразу после перемещения вернёт внутреннее средство чтения в ту же позицию.

Подробнее см. в разделе AsyncSeek.

Примечание: В редком случае, когда выполняется перемещение с помощью SeekFrom::Current(n), при котором n минус длина внутреннего буфера выходит за пределы i64, вместо одного перемещения будут выполнены два. Если второе перемещение вернёт Err, внутреннее средство чтения останется в той же позиции, в которой оно находилось бы при вызове seek с SeekFrom::Current(0).

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

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

Перемещается к смещению в байтах во внутреннем средстве записи.

Перед перемещением внутренний буфер всегда записывается.

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

Spec-Zone.ru

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