因此,我试图对包含二进制数据(bincode)的消息进行反序列化,该二进制文件未通过serde进行序列化,但是我正在尝试使用serde对其进行反序列化。但是,发送的数据可选地具有原始数据部分,该部分的末尾没有前缀,但可以保证是消息的其余部分。塞尔德总是期望有一个长度。由于不兼容我自己设计/设计的系统,因此出于向后兼容性的考虑,我无法添加长度,因此此兼容性很重要。Serde是否有可能做到这一点,我将如何去做?
我已经查看了serde和bincode的文档,但是找不到任何帮助我的文档。
bincode::deserialize_from
使您可以保留输入流中的所有尾随数据。
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(())
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句