【问题标题】:Is it safe to use boost serialization to serialize objects in C++ to a binary format for use over a socket?使用 boost 序列化将 C++ 中的对象序列化为二进制格式以便在套接字上使用是否安全?
【发布时间】:2011-01-19 05:31:59
【问题描述】:

我知道您可以使用 boost 序列化来序列化为文本格式,然后通过套接字推送,但我想将一类统计数据序列化为二进制格式(出于大小和编码/解码开销的原因)。为此使用boost序列化是否安全?

我的具体担心是:

  1. 不同平台上整数类型大小的差异(主要是 32 位和 64 位)。
    虽然我可以通过使用 stdint 中精确大小的整数在很大程度上解决这个问题,但我仍然想了解这种行为。
  2. 系统之间的字节序差异,boost 是否序列化为标准字节序(例如:网络排序),然后使用主机的字节序进行反序列化?

这是一个非常好的库,但不幸的是,关于它的二进制功能的文档有些有限,所以我只想确保以这种方式使用它是安全的。

【问题讨论】:

    标签: c++ serialization boost networking tcp


    【解决方案1】:

    不,通常 boost 二进制 序列化不是机器独立的。见here

    【讨论】:

    • 我看到的与可移植性有关的唯一一件事是他们的目标之一的声明:“数据可移植性 - 在一个平台上创建的字节流应该在任何其他平台上都可以读取。”
    • 啊。愚蠢的框架。检查更新的链接。向下滚动大约 1/3。
    • 他可能指的是“存档模型”部分中的第一个代码块,其中注释将二进制存档类型描述为不可移植。
    • 一般来说,它是可移植的,但它不是二进制文件特有的。这个答案完全是误传。
    • 我写到 boost binary 序列化不是机器独立的。请重读我的回答。
    【解决方案2】:

    它可用,我听说过很多关于 Google 的 protobuf 的信息。它有一个 C 和 C++ binding

    【讨论】:

    • 我从未使用过 protobuf,也不确定它是否能正确处理字节序。我做了一些搜索,发现了这个,它指出它总是会反序列化为本地机器的本机字节顺序,所以它应该可以满足您的目的:markmail.org/message/…
    【解决方案3】:

    您应该查看Apache Thrift。它是由 Facebook 为跨平台序列化/反序列化而设计的。

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 2023-03-18
      • 2016-09-25
      • 2010-12-17
      • 1970-01-01
      • 2018-10-07
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多