为什么io::copy需要读者和写作者都是可变引用?

24
为什么 std::io::copy 要求读取器和写入器参数都需要作为可变引用传递?
我能理解为什么写入器需要被改变以适应将数据写入其中,从而改变其内部状态。
然而,为什么读取器也必须标记为可变引用呢?如果我只是读取数据,那么我不仅需要给定类型的引用,而不是可变引用吗?
1个回答

31

因为 Read 类型通常是一次性的:通过从中读取数据,你就是在改变它。

考虑标准输入:你只能从中读取一次,所以一些东西必须在改变。当你从套接字读取数据时,几乎肯定会改变内部缓冲区,用于解决网络数据包和您想要在任何给定时刻读取多少数据之间的差异。那么从Chain中读取呢?它用于将可读物件连接在一起;没有变异,它就不能跟踪应该从哪个物件读取数据。

当然,可能存在一个不需要可变访问权限来执行读取操作的Read类型,但这并非普遍如此,因为不是普遍如此,所以Read特质需要可变访问权限。


1
那实际上是一个非常清晰明了的解释。谢谢! - Ralph Caraveo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接