Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

5年前关闭。



Improve this question




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

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

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

最佳答案

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

您可以在这里选择(根据我的意见,从最好到最坏的解决方案排序):

  • 您可以将Cap'n proto实现用于Rust
  • https://github.com/dwrensha/capnproto-rust
  • 并不是真正的序列化,更多的是结构的强制格式,然后无需任何转换即可通过网络发送
  • 快速
  • 您可以编写自己的Serializer和Deserializer。
  • 您可以完全控制
  • 格式
    每个单个数据的
  • 运行时开销
  • 您需要实现很多东西
  • 您可以将您的结构transmute[u8]并将其发送
  • 可能是最快的解决方案
  • 您需要确保两侧程序的编译器完全相同,否则格式不匹配。
  • 邪恶的人可能会向您发送错误的数据。当您回传transmute时,您会得到缓冲区溢出和
  • 信息
    数据结构中的
  • 引用将导致野生指针和未定义行为
  • 不要使用引用
  • 09-04 13:37
    查看更多