Memory management 如何将TcpStream发送给BufReader,然后将其收回?

Memory management 如何将TcpStream发送给BufReader,然后将其收回?,memory-management,reference,rust,borrowing,Memory Management,Reference,Rust,Borrowing,我有一个结构: pub struct Paradise { cstream: TcpStream, } 用一种方法: pub fn write_message(&mut self, code: i32, message: &str) { let foo = format!("{} {}\r\n", code, message); let _ = self.cstream.write(foo.as_bytes()); } 这很有效。它是一个FTP服务器,

我有一个结构:

pub struct Paradise {
    cstream: TcpStream,
}
用一种方法:

pub fn write_message(&mut self, code: i32, message: &str) {
    let foo = format!("{} {}\r\n", code, message);
    let _ = self.cstream.write(foo.as_bytes());
}
这很有效。它是一个FTP服务器,因此当我从
TcpListener::bind
获得新的
TcpStream
时,我会:

let mut p = Paradise::new(stream);
p.start();
在我调用的
start
方法中:

self.write_message(220, "Welcome to Paradise");
果然,我在FTP客户端看到了这条消息。到目前为止还不错

但我会:

let mut br = BufReader::new(&self.cstream);
loop {
    let mut buffer = String::new();
    let _ = br.read_line(&mut buffer);
    println!("{:?}", buffer);
    self.write_message(550, "Testing");
}
当我到达下一个
write_message
循环内调用时:

无法将
*self
作为可变项借用,因为
self.cstream
也是可变的 借用为不可变[E0502]

完整代码:

我如何改变周围的东西,以便在循环中调用
编写消息

如何将TcpStream发送给BufReader,然后将其收回

致电:

impl BufReader{
fn进入_内部(自)->R
}
打开此
BufReader
,返回底层读取器

请注意,内部缓冲区中的任何剩余数据都将丢失

如何将TcpStream发送给BufReader,然后将其收回

致电:

impl BufReader{
fn进入_内部(自)->R
}
打开此
BufReader
,返回底层读取器

请注意,内部缓冲区中的任何剩余数据都将丢失


当前有。^您是说我错误地使用堆栈溢出来学习生锈吗?你为什么这么反对学习?哈哈,我当然不反对学习。我(间接地)指出,很多人花了大量时间在70个上下文中向70个人解释错误信息。除了这些问题之外,阅读(大部分)这些问题并解释是什么让你的问题与众不同是礼貌的。请注意,我回答了你在标题中提出的问题,这个问题似乎很独特,但可能实际上是重复的或与之相关的问题。此外,我很确定“你为什么如此反对学习?”是某种逻辑谬误或类似的问题^_^@AndrewArrow:stackoverflow的目的是在不必提问的情况下获得问题的答案。它还旨在巩固知识,而不是将其分散在这么多页中的十几个半心半意的解释中。这意味着,一般来说,如果你问了一个已经被问过的问题,它应该被关闭。如果已经提出的问题的答案不充分,那么最好改进这些答案,而不是留下不完整的答案。作为推论,一个不同的问题需要清楚地表明它是如何不同的;可能不明显。目前有。^你是说我错误地使用堆栈溢出来学习生锈吗?你为什么这么反对学习?哈哈,我当然不反对学习。我(间接地)指出,很多人花了大量时间在70个上下文中向70个人解释错误信息。除了这些问题之外,阅读(大部分)这些问题并解释是什么让你的问题与众不同是礼貌的。请注意,我回答了你在标题中提出的问题,这个问题似乎很独特,但可能实际上是重复的或与之相关的问题。此外,我很确定“你为什么如此反对学习?”是某种逻辑谬误或类似的问题^_^@AndrewArrow:stackoverflow的目的是在不必提问的情况下获得问题的答案。它还旨在巩固知识,而不是将其分散在这么多页中的十几个半心半意的解释中。这意味着,一般来说,如果你问了一个已经被问过的问题,它应该被关闭。如果已经提出的问题的答案不充分,那么最好改进这些答案,而不是留下不完整的答案。作为推论,一个不同的问题需要清楚地表明它是如何不同的;这可能并不明显。
impl<R: Read> BufReader<R> {
    fn into_inner(self) -> R
}