跳到主要内容

copy

搜索

函数 copy 

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

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

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

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

这是 std::io::copy.

会创建一个 8 KB 的堆分配复制缓冲区,用于将数据从 reader 传递到 writer,如果想要 AsyncBufRead 的替代方案, 请查看 copy_buf。 你可以将 copy_bufBufReader 一起使用 以更改缓冲区容量。

§When to use async alternatives instead of SyncIoBridge

如果你希望将 std::io::copy 与同步消费者 (如 hasher 或压缩器)一起使用,请考虑使用异步替代方案, 而不是用 SyncIoBridge 包装 reader。 有关详细信息,请参阅 SyncIoBridge 文档。

§Errors

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

§示例

use tokio::io;

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

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

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