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

fad*_*bee 5 binary serialization rust

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

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

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

oli*_*obk 7

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

你有几个选择(根据我的意见从最好到最差的解决方案排序):

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

  • @Levans,no - 带引用的类型也可以是`Copy`.我会说`Copy +'static`更像是它,但``const`指针也是`Copy` AFAIK. (2认同)