首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台和语言(反)序列化

跨平台和语言(反)序列化
EN

Stack Overflow用户
提问于 2009-09-14 13:57:31
回答 7查看 9.6K关注 0票数 12

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

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

我已经研究过boost.serialize,但我不认为有一种方法可以实现与Java的兼容性。同样用于继承Java中的Serializable。

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

提前干杯!

EN

回答 7

Stack Overflow用户

发布于 2015-07-07 13:12:32

我在这里跌跌撞撞,有一个非常相似的问题。6年后,这可能对你没有用处,但希望对其他人有用。

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

不要忘记在其他答案中发布的替代方案。下面是几个例子:

  • YAML:JSON去掉了所有的双引号,但使用了缩进。它更具人类可读性,但效率可能较低,特别是因为它获得了larger.
  • BSON (二进制JSON)
  • MessagePack (另一种压缩的JSON)

由于有如此多的变体,JSON在简单性/便利性和跨平台访问方面显然是赢家。在过去的几年里,随着JavaScript的兴起,它变得更加流行。很多人可能会把它当做一个实际的解决方案,而没有考虑太多(这就是我最初做的:P)。

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

为了加快C++中的JSON处理速度,您还可以使用RapidJSON

票数 8
EN

Stack Overflow用户

发布于 2009-09-14 20:19:29

我很惊讶Jon Skeet还没有抓住这个机会:-)

Protocol Buffers在很大程度上是为这种场景设计的--跨语言传递结构化数据。

也就是说,如果您正在按照您建议的方式使用数据库,那么您真的不应该使用Oracle或SQL Server等功能强大的RDBMS,而应该使用轻量级的键值存储,如Berkeley DB或许多“云表”引擎之一。

票数 7
EN

Stack Overflow用户

发布于 2009-09-14 20:42:55

如果我真的想跨语言,我通常会建议使用JSON,因为它支持javascript和abundance of libraries,而且易于阅读和修改(与XML相比,我更喜欢它,因为我发现它在字符方面更小,速度更快,可读性更好)。然而,就空间而言,它并不是最高效的,而且像protocol buffersthrift这样更具机器可读性的格式在这方面会有优势(thrift可以从IDL生成,但它也是为编码服务而设计的,因此它可能比您想要的更重)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1421707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档