作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将我的一些旧代码转换为 future 异步/等待风格并且遇到了问题。
我正在使用 tokio_util crate ,因为我正在处理带有 Encoder
的框架协议(protocol)和 Decoder
这个箱子的特征。
对于Decoder
,我需要查看传递的 bytes::BytesMut
的前 2 个字节struct 因为这些字节保存了帧的长度。然而 BytesMut
struct 不容易做到这一点。我的功能是:
impl Decoder for MyCodec {
type Item = ServerMessage;
type Error = io::Error;
fn decode(&mut self, buf: &mut BytesMut) -> io::Result<Option<ServerMessage>> {
if buf.len() <= 2 {
return Ok(None);
};
BytesMut
结构体。
最佳答案
经过一些实验,我认为这可能是做到这一点的最佳方式。来自 standard library documentation它在“from_be_bytes”函数下显示“从切片而不是数组开始时,可以使用易出错的转换 API”。
use bytes::BytesMut;
use std::convert::TryInto;
impl Decoder for MyCodec {
type Item = ServerMessage;
type Error = io::Error;
fn decode(&mut self, buf: &mut BytesMut) -> io::Result<Option<ServerMessage>> {
if buf.len() <= 2 {
return Ok(None);
};
let frame_size = u16::from_be_bytes(buf[..2].try_into().unwrap());
...
}
}
关于rust - 如何从 bytes::BytesMut 中查看大端值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103685/
我是一名优秀的程序员,十分优秀!