从读取到写入的最简单方法是什么

迈克尔·蒂勒

我有两个物体。一个实现std::io::Read特征,另一个实现std::io::Write特征(例如,两个std::fs::File实例)。我正在尝试找出一种简单有效的方式将数据从Read实例传输Write实例中。

让我补充说,我完全了解std::fs::copy,但这仅适用于文件系统上的文件……并非如此。我还查看了std::io::copy,但它不适用于ReadWrite实例。

我知道我可以使用以下内容将中的内容读ReadVec<u8>

let mut data = Vec::new();
file.read_to_end(&mut data);

但是read_to_end填充了一个Vec<u8>但对应的函数Writewrite_all需要一个&[u8],我看不到有任何方法Vec<u8>允许我创建一个新数组,只有一个预先指定大小的切片。

我可以想象有几种不同的方法可以做到这一点(一次读/写一个字节,读/写块)。但是我希望其中有一些功能std可以完成所有这些工作(具有所有必需的错误处理,块大小管理等),但是如果它存在,我将无法找到它。

有什么简单的建议吗?我对Rust来说还算陌生,但是当我说我花了很多时间寻找这样的东西却找不到时,请相信我。是的,我意识到那时候我可以实施,但是我想要一种高效的东西,而且我担心我写的东西不是最佳的。

感谢您的协助。

亚历克

我还查看了std::io::copy,但它不适用于ReadWrite实例。

是的 查看其签名中的where子句

pub fn copy<R: ?Sized, W: ?Sized>(reader: &mut R, writer: &mut W) -> Result<u64> 
where R: Read, W: Write

例如,在这里我将stdin重定向到stdout:

use std::io;

fn main() {
  let mut stdin = io::stdin();
  let mut stdout = io::stdout();
  io::copy(&mut stdin,&mut stdout);
}

如果您正在寻找一个可直接装入和读出的缓冲区,BufStreambufstream应该使用板条箱。

我可以想象有几种不同的方法可以做到这一点(一次读/写一个字节,读/写块)。但是我希望std中有一些功能可以完成所有这些工作(包括所有必需的错误处理,块大小管理等),但是如果它存在,我将无法找到它。

也就是说究竟 是什么std::io::copy-它分配一个缓冲区,然后读入该缓冲区,并从该缓冲区写出来,直到有一无所有阅读之间循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从()提取特定信息的最简单方法是什么?

打印Java数组的最简单方法是什么?

将文件读入String的最简单方法是什么?

在Java应用程序中读取XML文件的最佳/最简单方法是什么?

使用Python进行SSH的最简单方法是什么?

逆转ArrayList的最简单方法是什么?

用Python读取/写入文件内容的最简单方法

在Python中转义HTML的最简单方法是什么?

持久化Java对象的最简单方法是什么?

用Java做“是”的最简单方法是什么?

实现依赖注入的最简单方法是什么?

从C ++调用Java方法的最简单方法是什么?

读取和写入文件的最简单方法

复制活动记录记录的最简单方法是什么?

使C ++程序崩溃的最简单方法是什么?

安装缺少的Perl模块的最简单方法是什么?

如果可以失败,从stdin读取几个int的最简单方法是什么?

快速崩溃的最简单方法是什么?

在Perl中写入文件时测试错误处理的最简单方法是什么?

xslt:做否定选择的最简单方法是什么?

在nginx上启用PHP的最简单方法是什么?

安装gem的最简单方法是什么?

将整数列表写入二进制文件的最简单方法是什么?

在本地安装Drupal的最简单方法是什么?

创建坐标列表的最简单方法是什么?

反应访问语言环境的最简单方法是什么

在 Java 中打开、修改和读取 .txt 文件更改的最简单方法是什么?

合并 / 和 /home 的最简单方法是什么?

在 Python 中制作 ByteEnum 的最简单方法是什么?