gpt4 book ai didi

language-agnostic - 跨平台和语言(反)序列化

转载 作者:行者123 更新时间:2023-12-04 01:45:53 32 4
gpt4 key购买 nike

我正在寻找一种以最方便的方式序列化一堆 C++ 结构的方法,以便序列化可以跨 C++ 和 Java(至少)以及跨 32 位/64 位、大/小端平台移植。要序列化的结构只包含数据,即它们是没有状态或行为的纯数据对象。

这个想法是我们将结构序列化为一个八位字节 blob,我们可以“一般地”将其存储在数据库中,并在以后读取。因此避免在结构更改时更改数据库,也避免将每个数据成员分配给一个字段 - 即我们只希望一个表将所有内容“一般地”保存为二进制 blob。这应该可以减少开发人员的工作,并且在结构更改时需要的更改更少。

我看过 boost.serialize 但不认为有办法启用与 Java 的兼容性。在 Java 中继承 Serializable 也是如此。

如果有一种方法可以从 IDL 文件开始,这将是最好的,因为我们已经有了描述结构的 IDL 文件。

提前加油!

最佳答案

我在这里绊倒了,有一个非常相似的问题。 6 年后,这可能对您没有用,但希望对其他人有用。

有很多替代方案,不幸的是没有明显的赢家(尽管有人可能会争辩说 JSON 是明显的赢家)。甚至谷歌也发布了多种竞争技术(所有这些显然都在内部使用):

  • FlatBuffers :这个似乎符合原始问题的要求,has interesting benchmarkssupports some form of IDL (我个人不熟悉 IDL)
  • Protocol Buffers : 前面提到过。
  • XFJSON :比 JSON 小 5%-12%。

  • 不要忘记其他答案中发布的替代方案。这里还有一些:
  • YAML : JSON 减去所有双引号,但使用缩进代替。它更具人类可读性,但可能效率较低,尤其是当它变大时。
  • BSON (二进制 JSON)
  • MessagePack (另一个压缩的 JSON)

  • 有这么多变体,JSON 在简单/方便和跨平台访问方面显然是赢家。在过去的几年里,随着 JavaScript 的兴起,它变得更加流行。很多人可能将其用作事实上的解决方案,而没有考虑太多(这就是我最初所做的:P)。

    但是,如果大小成为一个问题,但您更喜欢保持简单而不使用更高级的库之一,则可以使用 zlib 压缩 JSON。 (这就是我现在正在做的),或其他一些跨平台算法(但那是另一个话题)。

    要加速 C++ 中的 JSON 处理,您还可以使用 RapidJSON .

    关于language-agnostic - 跨平台和语言(反)序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421707/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com