跳到主要内容

AsyncSeek

搜索

特性 AsyncSeek 

Source
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>>;
}
展开描述

异步定位字节。

此 trait 类似于 std::io::Seek trait,但与异步任务系统集成。 特别地,start_seek 方法与 Seek::seek 不同,它不会阻塞调用线程。

用于处理 AsyncSeek 值的工具方法由 AsyncSeekExt 提供。

必需方法§

Source

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

尝试按字节偏移量在流中定位。

允许定位到超出流末尾的位置,但具体行为由实现定义。

如果此函数成功返回,那么任务已被提交。 要了解何时完成,请调用 poll_complete

§Errors

如果有另一个定位正在进行,此函数可能返回 io::ErrorKind::Other。 为避免这种情况,建议在任何 start_seek 调用之前先调用 poll_complete, 以确保所有挂起的定位都已完成。

Source

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

等待定位操作完成。

如果定位操作成功完成,此方法将返回从流开头算起的新位置。 该位置稍后可与 SeekFrom::Start 一起使用。

此方法返回的位置仅在 start_seek 之后立即有效。 如果在调用 start_seek 之后通过读取或写入等方式更改了位置, 那么返回的位置是否考虑该位置变化是未指定的。 类似地,如果从未调用过 start_seek, 那么 poll_complete 是否返回实际位置或其它占位值(如 0)也是未指定的。

§Errors

定位到负偏移量被视为错误。

外部类型的实现§

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

实现者§

Source§

impl AsyncSeek for File

Source§

impl AsyncSeek for Empty

Source§

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

在底层读取器中按字节偏移量定位。

使用 SeekFrom::Current(_) 进行定位时,所用的位置是假设 BufReader 没有内部缓冲区时底层读取器应处的位置。

定位操作始终会丢弃内部缓冲区,即使定位的位置本应落在该缓冲区内。 这保证在定位之后立即调用 .into_inner() 得到的底层读取器与定位时所处的位置一致。

更多详情请参阅 AsyncSeek

注意:在边界情况下,当你使用 SeekFrom::Current(n) 进行定位时,如果 n 减去内部缓冲区长度会溢出 i64,则会执行两次定位而不是一次。 如果第二次定位返回 Err,则底层读取器将停留在与使用 SeekFrom::Current(0) 调用 seek 相同的位置上。

Source§

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

在底层流中按字节偏移量定位。

使用 SeekFrom::Current(_) 进行定位时,所用的位置是假设 BufStream 没有内部缓冲区时底层流应处的位置。

定位操作始终会丢弃内部缓冲区,即使定位的位置本应落在该缓冲区内。 这保证在定位之后立即调用 .into_inner() 得到的底层读取器与定位时所处的位置一致。

更多详情请参阅 AsyncSeek

注意:在边界情况下,当你使用 SeekFrom::Current(n) 进行定位时,如果 n 减去内部缓冲区长度会溢出 i64,则会执行两次定位而不是一次。 如果第二次定位返回 Err,则底层读取器将停留在与使用 SeekFrom::Current(0) 调用 seek 相同的位置上。

Source§

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

在底层写入器中按字节偏移量定位。

定位前始终会先写出内部缓冲区的内容。