跳到主要内容

copy_buf

搜索

函数 copy_buf 

Source
pub async fn copy_buf<'a, R, W>(
    reader: &'a mut R,
    writer: &'a mut W,
) -> Result<u64>
where R: AsyncBufRead + Unpin + ?Sized, W: AsyncWrite + Unpin + ?Sized,
展开描述

以异步方式将一个 reader 的全部内容复制到 writer 中。

此函数返回一个 future,它将持续从 reader 读取数据,然后以流式方式将其写入 writer, 直到 reader 返回 EOF 或失败。

成功时,会返回从 reader 复制到 writer 的总字节数。

这是 tokio::io::copy 针对 AsyncBufRead reader 的替代方案,无需额外的缓冲区分配, 因为 AsyncBufRead 允许访问 reader 的内部缓冲区。

§When to use async alternatives instead of SyncIoBridge

如果你希望将 std::io::copy 与同步消费者 (如 hasher 或压缩器)一起使用,请考虑使用异步替代方案, 而不是用 SyncIoBridge 包装 reader。 有关在散列、压缩和数据解析方面的详细示例和指南, 请参阅 SyncIoBridge 文档。

§Errors

如果对 poll_fill_bufpoll_write 的任何调用返回错误, 则返回的 future 将立即返回错误。

§示例

use tokio::io;

let mut reader: &[u8] = b"hello";
let mut writer: Vec<u8> = vec![];

io::copy_buf(&mut reader, &mut writer).await?;

assert_eq!(b"hello", &writer[..]);