【发布时间】:2019-05-20 11:10:09
【问题描述】:
我遇到了 Rust bincode 库的问题。当它序列化一个向量时,它总是假设前缀长度是 8 个字节。当您总是使用 bincode 对数据进行编码时,这是一个很好的假设,因为 bincode 可以读取它自己的序列化数据。
我处于无法影响序列化程序的情况,因为我没有编写它,并且由于遗留原因它必须保持不变。它将向量编码为一个以长度为前缀的数组,其中前缀始终为 2 个字节(或者在某些情况下为 4 个字节,但我非常了解这些情况。一旦我知道如何使用 2 个字节进行操作,4 个字节就不应该是问题)。
如何使用 bincode(以及 serde)来反序列化这些字段?我可以解决在 bincode 中硬编码的默认 8 字节长度吗?
【问题讨论】:
-
您试图从中解码数据的序列化程序是什么? Bincode 不应该与任何现有的序列化程序兼容。
-
此数据由 python 程序序列化并通过 udp 套接字发送。
-
但是python程序中的序列化是某种公开命名的格式吗?还是只是为项目创建的一组特别的
struct.packs? -
后者,我没有创建这个程序。它是 tribler 的 ipv8 项目github.com/Tribler/py-ipv8/blob/master/ipv8/messaging/… 的一部分。我只需要解释他们发送的数据。 Bincode 似乎是最好的方法,我实现了他们标准的 90%。它主要是关于他们发送的可变长度的东西,因为它们的长度前缀与 bincode 不兼容。
标签: rust deserialization serde