如何正确修复std::net::TcpStream::read()的clippy::unused_io_aunt



在Rust的书《最终项目》中,代码按照预期使用cargo run编译并运行。

然而,clippyclippy::unused_io_amount突出显示了这些注释行

let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap();          // clippy: read amount is not handled
// --snip--
stream.write(response.as_bytes()).unwrap(); // clippy: written amount is not handled
stream.flush().unwrap();

建议的解决方案是将read更改为read_exact,将write更改为write_all。然而,当运行这些更改时,我会得到以下错误:

thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: UnexpectedEof, message: "failed to fill whole buffer" }', src/main.rs:24:36

如何修复clippy::unused_io_aunt警告,以便能够在没有任何警告的情况下正确运行rust最终项目代码,并使其按预期工作

p.s.在最终项目中列出了write_all,但read的警告仍在继续。

stream.write(...).unwrap()将返回已写入stream的字节数。你的警告说没有处理这个号码。这意味着您应该编写let bytes_amount = stream.write(...).unwrap();,然后将bytes_amountbuffer.len()进行比较。为什么?因为在现实生活中,可能会出现并非所有缓冲区中的数据都写入流的情况。你应该处理这种情况

read函数相同。

read_exact失败的原因。read_exact函数试图读取字节以填充WHOLE缓冲区,但可能是在缓冲区被填充之前流结束的情况。

最新更新