Rust 如何在没有给定长度的情况下反序列化二进制码字段

Rust 如何在没有给定长度的情况下反序列化二进制码字段,rust,deserialization,serde,Rust,Deserialization,Serde,所以我尝试反序列化一个由二进制数据(bincode)组成的消息,这个二进制数据不是由serde序列化的,但是我尝试使用serde来反序列化它。但是,data send(数据发送)有一个可选的原始数据部分,其末尾的长度没有前缀,但保证是消息的其余部分。塞德总是期待一段时间。我无法添加长度,因为与非我制造/设计的系统存在向后兼容性问题,此兼容性非常重要。使用Serde是否可以实现这一点?我将如何实现这一点 我已经查看了serde和bincode的文档,在其中找不到任何帮助。允许您在输入流中保留任何后

所以我尝试反序列化一个由二进制数据(bincode)组成的消息,这个二进制数据不是由serde序列化的,但是我尝试使用serde来反序列化它。但是,data send(数据发送)有一个可选的原始数据部分,其末尾的长度没有前缀,但保证是消息的其余部分。塞德总是期待一段时间。我无法添加长度,因为与非我制造/设计的系统存在向后兼容性问题,此兼容性非常重要。使用Serde是否可以实现这一点?我将如何实现这一点

我已经查看了serde和bincode的文档,在其中找不到任何帮助。

允许您在输入流中保留任何后续数据


使用serde::反序列化;
#[派生(反序列化、调试)]
结构数据{
问:字符串,
r:i32,
#[serde(跳过)]
尾随:Vec,
}
fn main()->bincode::Result{
让字节=[7,0,0,0,0,0,0,115,117,99,99,101,115,115,227,7,0,0,3,2,1];
让mut cursor=&字节[…];
让mut data:data=bincode::反序列化来自(&mut cursor)?;
data.training=cursor.to_owned();
println!(“{:#?}”,数据);
好(())
}

碰巧这也是我所需要的!感谢您的回复和我的a+1:D
use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct Data {
    q: String,
    r: i32,

    #[serde(skip)]
    trailing: Vec<u8>,
}

fn main() -> bincode::Result<()> {
    let bytes = [7, 0, 0, 0, 0, 0, 0, 0, 115, 117, 99, 99, 101, 115, 115, 227, 7, 0, 0, 3, 2, 1];

    let mut cursor = &bytes[..];
    let mut data: Data = bincode::deserialize_from(&mut cursor)?;
    data.trailing = cursor.to_owned();

    println!("{:#?}", data);
    Ok(())
}