支持部分序列化的C ++序列化库?

时间:2009-11-27 19:38:23

标签: c++ serialization boost protocol-buffers partial

是否有支持部分序列化的现有C ++序列化库?

通过“部分序列化”,我的意思是我可能希望保存3个特定成员的值,然后能够将该保存的副本应用于其他实例。我只会更新这3个成员并保留其他成员。

这对于通过网络同步数据非常有用。假设我在客户端和服务器上有一些对象,当成员在服务器上发生更改时,我想向客户端发送一条消息,其中包含该成员和仅该成员的更新值。我不想通过电汇发送整个对象的副本。

boost::serialization一眼就看起来它只支持全部或全部。

编辑:在最初写这篇文章3年后,我回头看看它并对自己说'哇?' boost :: serialization允许你定义你想要保存或不保存的成员,因此它支持“部分序列化”,正如我似乎已经描述过的那样。此外,由于C ++缺少反射序列化库,因此要求您明确指定要保存的每个成员,除非它们带有某种外部工具来解析源文件或具有用于生成C ++代码的单独输入文件格式(例如, Protocol Buffers做了什么)。我想在写这篇文章时,我一定在概念上感到困惑。

2 个答案:

答案 0 :(得分:4)

你显然不是在寻找序列化。

序列化是关于保存对象然后从字节流重新创建它。想想视频游戏保存或网络服务器的会话上下文。

您需要的是消息传递。 Google's FlatBuffers对此很好。指定一条消息,其中包含每个单独的字段作为可选消息,在收到消息后,使用现有字段更新对象并保持其他字段不变。

FlatBuffers的优点在于它可以很好地处理前向和后向兼容性,以及文本和二进制编码(文本非常适合调试,二进制文件更适合纯粹的性能),而且只需要零成本解析步骤。

你甚至可以用另一种语言(比如python或ruby)解码这些消息,如果你把它们保存在某个地方并想把一个html gui放在一起来检查它!

答案 1 :(得分:0)

虽然我不熟悉它们,但您也可以查看Google's Protocol Buffers