【问题标题】:Boost Serialization equivalent in Python [closed]Python中的Boost序列化等效[关闭]
【发布时间】:2017-10-02 03:49:55
【问题描述】:

我有一个项目,其中有一个使用 boost 序列化来序列化 xml 文件的现有 Cpp。我不允许更改现有的 Cp,因此我需要在 python 中复制 boost 序列化正在执行的操作。 python中是否有与boost序列化具有相同逻辑的库?

boost 序列化的示例输出

"22 serialization::archive 14 0 0 9 localhost 8888 0 0 0 0 1"

附言。我试过泡菜,但泡菜的输出与升压序列化相比不一样。

【问题讨论】:

  • 那么我错过了 CPP 文件解析 xml 然后使用 boost 存档对其进行序列化的部分

标签: python c++ serialization boost


【解决方案1】:

这看起来不像 XML。相反,它看起来可能是 Boost 的文本存档格式(您必须检查)。

您的选择将包括:

  • 使用您编写的代码解析文本
  • 说服 C++ 代码的作者使用 XML(在 Python 中很容易处理)
  • 两者都使用 Google Protocol Buffers 或 Avro 等。这从一开始就是理想的选择,因为它不需要您或 C++ 代码的作者实际编写任何代码。在计划集成异构系统(即 C++ 和 Python)时,非常值得选择一种专为这项工作设计的技术(例如 Google Protocol Buffers),即支持异构的技术。

如果必须以另一种语言读取存档/流,则像 Boost 序列化这样的语言内序列化通常是错误的方法,因为这意味着必须在两个地方编写和维护代码(在您的情况下C++ 和 Python 中)。这会导致工作量增加(你们俩都必须编写代码)和风险增加(你们中的一个人可能会犯错误)。

相比之下,使用具有模式语言和代码生成器的序列化技术可以完全消除所有这些工作和风险。例如,对于 GPB,您将编写一个模式文件 (.proto),并将其编译为 C++ 代码和 Python 代码。他们将使用 C++,您将使用 Python,并且您将自动从该 .proto 文件指定的通用格式进行序列化/反序列化。

如果你们之间正在交换的数据的内容需要改变,你改变架构并重新编译它。您自己编写的任何 C++ 或 Python 代码都不需要更改(除了考虑您在 .proto 中添加的额外消息字段)。

【讨论】:

  • XML 存档格式与文本格式一样具有专有性。因此,即使解析器将读取它以及格式正确的 XML(希望如此),它也几乎不可能有效地解释。考虑使用 Boost Python 或 Py++11
  • 对不起,我想我错过了 CPP 文件解析 xml 文件然后序列化它的部分。你是对的,它是文本存档格式。我们需要像在python中那样进行boost序列化的原因是我们需要替换一个只处理发送和接收数据的进程。让我们称之为进程A。进程A处理序列化/反序列化数据并将其传递给python类让我们称之为进程B。然后它将作为套接字发送到进程C。ABC什么我们需要的是移除Process A.并使用B来处理数据BA的序列化/反序列化
  • @sehe,是的,XML 仍然是专有的,但至少有 Python 库可以很好地解析它。有点中途的房子!
  • 这是虚假的希望。相信我。除了最琐碎的对象图之外的所有对象。
  • @sehe,是的,没关系。我经常使用商业 ASN.1 工具,相信我 GPB 生成的 C++ 类(相比之下)一点也不差。我确实希望这些东西的创建者会使用 STL...奇怪的是,很少有(比如,没有)ASN.1 --> Python 编译器,这是一个真正的麻烦,这就是为什么我没有提到它的原因远。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 2016-07-11
  • 1970-01-01
  • 2022-03-03
  • 2011-05-16
相关资源
最近更新 更多