gpt4 book ai didi

rust - 如果 BufReader 取得流的所有权,我如何在其上读取和写入行?

转载 作者:可可西里 更新时间:2023-11-01 02:29:58 27 4
gpt4 key购买 nike

我想从 TCPStream 中读取一行,向其中写入另一行,然后重复。问题是 BufReader::new 取得了我的 TCPStream 变量的所有权:

let stream = ...; // TCPStream

let reader = BufReader::new(stream); // moved its value

// can't use stream here anymore

有什么简单的解决方案?

最佳答案

解决方案:使用引用。

let mut stream = ...;
let reader = BufReader::new(&stream);
let writer = BufWriter::new(&stream);

说明

如果我们仔细查看 BufReader::new,我们会发现它接受类型为 R 的参数 inner,其中 R 只是实现 Read 的任何类型:

impl<R: Read> BufReader<R> {
pub fn new(inner: R) -> BufReader<R> { ... }
}

然后我们看一下 Read 并看到这个实现:

impl<'a> Read for &'a TcpStream

所以我们可以传递一个对new函数的引用,像这样:

let reader = BufReader::new(&stream);

我们将对 BufWriterWrite 做同样的事情,并且会看到确实有这个实现:

impl<'a> Write for &'a TcpStream

因此,我们可以再次使用不可变引用来创建 BufWriter

关于rust - 如果 BufReader 取得流的所有权,我如何在其上读取和写入行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com