为什么 io::copy 要求 reader 和 writer 都是可变引用?

Why does io::copy require the reader and writer to both be mutable references?

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

我能理解为什么需要对 writer 进行突变以适应写入其中的数据,从而改变其内部状态。

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

因为 Read 类型通常是一次性的:通过读取它,您 改变它。

考虑标准输入:您只能从中读取一次,因此 某些东西 必须改变。当您从套接字读取时,您几乎肯定会改变一个内部缓冲区,该缓冲区用于说明您获得的网络数据包之间的差异,以及您在任何给定时刻要读取的数据量。从 Chain 中读取如何,它用于将可读的东西连接在一起;没有突变,它无法跟踪它应该从哪一个读取。

当然,可能 Read 类型不需要可变访问权限来执行读取,但这不是 普遍 是的,因为它不是普遍正确的,所以 Read 特征需要可变访问。