2016-10-23 27 views
21

为什么std::io::copy要求读写器参数都需要作为可变引用传递?为什么io :: copy要求读写器都是可变引用?

我可以理解为什么作者需要进行变异以适应正在写入的数据,并改变其内部状态。

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

回答

29

因为Read类型,一般来说是一次性的:通过读取它,你突变它。

考虑标准输入:你只能从那读一次,所以东西必须改变。当您从套接字读取数据时,几乎可以肯定会突变一个内部缓冲区,用于说明您获得的网络数据包之间的差异以及您想要在特定时间读取多少数据。如何从Chain阅读,这是用来连接可读的东西在一起;没有突变,它不能跟踪它应该从哪个读取。

当然,这是可能Read类型不需要可变的访问进行读取,但是这不是普遍真实的,因为它不是普遍适用的Read特质要求可变的访问。

+0

这实际上是一个点亮晶莹剔透的解释。谢谢! –

+5

即使在“文件”中,您也正在更新当前的读取偏移量。 –

相关问题