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
}