为什么std::io::copy要求reader和writer参数都需要作为可变引用传递?

我可以理解为什么编写器需要进行变异,以适应写入它的数据,从而改变其内部状态.

然而,为什么读者也必须被标记为可变引用?如果我只读取数据,那么我不需要对给定类型的引用而不是可变引用吗?

推荐答案

因为一般来说,Read种类型都是一次性的:从中读取,你就可以对其进行are次变异.

考虑标准输入:你只能从一次读取,所以something必须改变.当您从套接字读取数据时,几乎可以肯定的是,您正在修改一个内部缓冲区,该缓冲区用于解释您获得的网络数据包之间的差异,以及您在任何给定时刻想要读取的数据量.读Chain本书怎么样,它用来把可读的东西连接在一起;如果没有Mutations ,它就无法追踪它应该从哪个基因中读取信息.

当然,有一个不需要可变访问来执行读取的Read类型是possible,但这不是universally,因为它不是普遍正确的,Read特性需要可变访问.

Rust相关问答推荐

将此字符串转换为由空格字符分隔的空格

在rust中如何修改一个盒装函数并将其赋回?

访问Rust中的隐藏变量

如果A == B,则将Rc A下推到Rc B

MPSC频道在接收器处阻塞

如何实现Serde::Ser::Error的调试

为什么Rust不支持带关联常量的特征对象?

我们能确定Rust会优化掉Clone()吗?如果它会立即掉落?

如何在嵌套的泛型 struct 中调用泛型方法?

结果流到 Vec 的结果:如何避免多个into_iter和collect?

需要哪些编译器优化来优化此递归调用?

返回迭代器考虑静态生命周期类型

Rust中是否可以在不复制的情况下从另一个不可变向量创建不可变向量?

为什么我可以同时传递可变和不可变引用?

没有分号的返回表达式的性能是否比使用返回更好?在Rust ?

使用方法、关联函数和自由函数在 Rust 中初始化函数指针之间的区别

从 Cranelift 发出 ASM

有没有办法隐藏类型定义?

Rust 中的运行时插件

如何迭代调用可能会失败的函数?操作员?