fwg*_*wgx 11 language-agnostic serialization cross-platform
我正在寻找一种以最方便的方式序列化一堆C++结构的方法,以便序列化可以跨C++和Java(至少)以及32位/ 64位,大/小端平台移植.要序列化的结构只包含数据,即它们是没有状态或行为的纯数据对象.
我们的想法是将结构序列化为一个八位字节blob,我们可以"存储"在数据库中,并在以后读出.因此,每当结构发生变化时都要避免更改数据库,并且还要避免将每个数据成员分配给字段 - 即我们只希望一个表"一般"将所有内容保存为二进制blob.这应该减少开发人员的工作量,并在结构发生变化时减少更改.
我看过boost.serialize,但不认为有办法实现与Java的兼容性.同样用于继承Java中的Serializable.
如果有一种方法可以通过最好的IDL文件来实现,因为我们已经有了描述结构的IDL文件.
提前干杯!
我很惊讶Jon Skeet还没有突然出现在这一个:-)
Protocol Buffers几乎是为这种场景设计的 - 传递结构化数据跨语言.
也就是说,如果您按照建议的方式使用数据库,那么您实际上不应该使用像Oracle或SQL Server这样的全功能RDBMS,而应该使用像Berkeley DB这样的轻量级键值存储或其中一个"云表"引擎.
我在这里遇到了一个非常相似的问题.6年后,这可能对你没用,但希望对其他人有用.
有很多替代方案,遗憾的是没有明显的赢家(尽管有人可能认为JSON是明显的赢家).甚至谷歌也发布了多种竞争技术(所有这些技术显然都在内部使用):
不要忘记其他答案中公布的替代方案.这里还有一些:
有了这么多的变化,JSON显然是简单/便利和跨平台访问方面的赢家.随着JavaScript的兴起,它在过去几年中变得更加流行.很多人可能会将其作为事实上的解决方案,而不需要太多考虑(这就是我最初的做法:P).
但是,如果大小成为一个问题,但你更喜欢保持简单而不使用一个更高级的库,你可以使用zlib(这就是我现在正在做的)压缩JSON ,或者其他一些跨平台算法(但是这是另一个主题).
要加速C++中的JSON处理,您还可以使用RapidJSON.
您为什么不选择 XML,因为它完全适合您的需求。C++ 和 Java 都可以轻松实现。
此外,我怀疑您将所有内容存储为数据库中的 blob 的想法,使用数据库设计的关系数据库,或者切换到一些面向对象的数据库,例如http://www.versant.com/en_US/products/同时支持 Java 和 C++ 的对象数据库。
| 归档时间: |
|
| 查看次数: |
7803 次 |
| 最近记录: |