Serialization 锈蚀数据结构的二进制序列化

Serialization 锈蚀数据结构的二进制序列化,serialization,binary,rust,Serialization,Binary,Rust,在Rust中序列化为二进制的当前状态是什么 我有一些大型(1-10MB)数据结构要通过网络发送,不想将它们编码为JSON或hex(我发现的两个序列化程序) 我找到了#[repr(packed)]。这是我应该使用的,还是有更便于携带的东西?#[repr(packed)]只会使您的数据变小。它不提供任何格式保证或序列化帮助 您在这里有几个选择(按我的意见从最佳到最差的顺序排列): 您可以使用Cap'n proto实现进行Rust 它不是真正的序列化,更多的是结构的强制格式,然后通过网络发送而不进

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

我有一些大型(1-10MB)数据结构要通过网络发送,不想将它们编码为JSON或hex(我发现的两个序列化程序)

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

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

您在这里有几个选择(按我的意见从最佳到最差的顺序排列):

  • 您可以使用Cap'n proto实现进行Rust
    • 它不是真正的序列化,更多的是结构的强制格式,然后通过网络发送而不进行任何转换
    • 快速
  • 您可以编写自己的序列化程序和反序列化程序。
    • 您可以完全控制格式
    • 每个数据的运行时开销
    • 你需要实现很多东西
  • 您可以
    将结构转换为
    [u8]
    并发送该文件
    • 可能是最快的解决方案
    • 您需要确保两侧程序的编译器完全相同,否则格式不匹配
    • 邪恶的人可能会向你发送坏数据。当你把它转换回来时,你会得到缓冲区溢出和其他东西
    • 数据结构中的引用将导致通配符和未定义的行为
      • 不要使用参考资料

  • 这应该是很容易做到这一点,无论是使用标准的
    io::{Read,Write}
    traits,还是
    rustc serialize
    Encodable
    Decodable
    traits。bincode正是我想要的。如果你回答这个问题,我会接受的。我不能,因为那些更了解的人显然认为这是一个糟糕的问题。(你问,“目前的状态是什么…?”这是如何“基于意见”的,远远超出了我有限的精神理解能力。)@BurntSushi5:1。图书馆的建议是离题的;2.在其他图书馆中挑选一个很容易演变成一场意见之争。这并不是问题“不好”,而是判断它不适合StackOverflow。问题的任何部分都不需要库推荐。
    transmute
    不仅对引用有效,而且对任何间接类型都有效,如
    String
    Vec
    。事实上,它只适用于由基本内置类型和此类类型的固定大小数组组成的结构。@Vladimitavevevevev这是
    Copy
    types吗?@Levans,没有-带引用的类型也可以是
    Copy
    。我想说,static
    更像它,但是
    *const
    指针也是
    Copy
    AFAIK.@VladimirMatveev哦,的确如此。