Rust数据结构的二进制序列化

时间:2015-04-07 13:00:55

标签: serialization binary rust

Rust中序列化到二进制的当前状态是什么?

我有一些大的(1-10MB)数据结构要通过网络发送,并且不想将它们编码为JSON或hex(我找到的两个串行器)。

我找到了#[repr(packed)]。这是我应该使用的,还是有更便携的东西?

1 个答案:

答案 0 :(得分:6)

#[repr(packed)]只会使您的数据变小。它不提供任何格式保证或序列化帮助。

你在这里有一些选择(根据我的观点从最好到最差的解决方案排序):

  1. 你可以使用Rust的Cap'n proto实现
  2. 您可以编写自己的Serializer和Deserializer。
    • 您可以完全控制格式
    • 每个数据的运行时开销
    • 你需要实现很多东西
  3. 您可以transmute将结构转换为[u8]并发送
    • 可能是最快的解决方案
    • 您需要确保双方程序的编译器完全相同,否则格式不匹配。
    • 有人可能会向你发送不良数据。当你transmute回来时,你会得到缓冲区溢出和东西
    • 数据结构中的引用将导致狂野指针和未定义的行为
      • 不要使用参考