我可以用Bincode反序列化具有可变长度前缀的向量吗?

人气:1,017 发布:2022-10-16 标签: deserialization rust serde

问题描述

我遇到了Rust二进制代码库的问题。当它序列化向量时,它始终假定前缀长度为8字节。当您始终使用BINCODE编码数据时,这是一个很好的假设,因为BINCODE可以读取它自己的序列化数据。

我所处的情况是我无法影响序列化程序,因为它不是我编写的,并且由于遗留原因,它必须保持不变。它将其向量编码为带有长度前缀的数组,其中前缀始终为2字节(或者在某些情况下为4字节,但我非常了解这些情况。一旦我知道如何用2字节做这件事,4字节应该不是问题)。

如何使用bincode(和serde)反序列化这些字段?我是否可以解决以二进制代码硬编码的默认8字节长度?

推荐答案

Bincode不应与任何现有的序列化程序或标准兼容。根据评论,也不是您尝试阅读的格式。

我建议您获取bincode源代码-它们是麻省理工学院许可的,因此您基本上可以自由地使用它们做任何您喜欢的事情-并根据您的格式对其进行修改(并将其命名并包含在您的项目中)。

serde::Deserializer和底层data model都有很好的文档记录,而且bincode中的实现很容易找到(在de/mod.rs中),所以请以它为起点,并根据需要进行调整。

201