我正在寻找一种以最方便的方式序列化一堆 C++ 结构的方法,以便序列化可以跨 C++ 和 Java(至少)以及跨 32 位/64 位、大/小端平台移植。要序列化的结构仅包含数据,即它们是没有状态或行为的纯数据对象。
我们的想法是,我们将结构序列化为一个八位字节 blob,我们可以“一般地”将其存储在数据库中,并在以后读出。因此,避免在结构发生更改时更改数据库,也避免将每个数据成员分配给一个字段 - 即,我们只希望一个表将所有内容“一般”保存为二进制 blob。这应该会减少开发人员的工作量,并且在结构发生变化时需要更少的更改。
我研究过 boost.serialize 但不认为有办法实现与 Java 的兼容性。 Java 中继承 Serialized 也是如此。
如果有一种方法可以从 IDL 文件开始,那将是最好的,因为我们已经有了描述结构的 IDL 文件。
提前干杯!
我偶然发现这里,有一个非常相似的问题。 6 年后,这可能对你没用,但希望对其他人有用。
有很多替代方案,不幸的是没有明显的赢家(尽管有人可能会认为 JSON 是明显的赢家)。甚至谷歌也发布了多种竞争技术(所有这些技术显然都在内部使用):
-
平面缓冲区: 这个似乎符合原问题的要求,有有趣的基准 and 支持某种形式的 IDL(我个人对IDL不太熟悉)
-
协议缓冲区: 前面提到过。
-
XFJSON:比 JSON 小 5%-12%。
不要忘记其他答案中发布的替代方案。这里还有一些:
-
YAML: JSON 减去所有双引号,但使用缩进代替。它更易于人类阅读,但效率可能较低,尤其是当它变得更大时。
-
BSON(二进制 JSON)
-
消息包(另一个压缩的 JSON)
由于有如此多的变体,JSON 在简单/方便和跨平台访问方面显然是赢家。随着 JavaScript 的兴起,它在过去几年中变得更加流行。很多人可能会使用它作为事实上的解决方案,而没有考虑太多(这就是我最初所做的:P)。
但是,如果大小成为问题,但您希望保持简单而不使用更高级的库之一,则可以使用以下命令压缩 JSONzlib(这就是我现在正在做的),或其他一些跨平台算法(但那是另一个主题)。
要加速 C++ 中的 JSON 处理,您还可以使用快速JSON.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)