4

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

通过“部分序列化”,我的意思是我可能想要保存 3 个特定成员的值,然后能够将该保存的副本应用到不同的实例。我只会更新这 3 个成员,而让其他成员保持原样。

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

boost::serialization乍一看好像只支持all or nothing。

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

4

2 回答 2

4

您显然不是在这里寻找序列化。

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

在这里,您需要的是消息传递。谷歌的 FlatBuffers非常适合这一点。将包含每个字段的消息指定为可选,在收到消息后,使用确实存在的字段更新您的对象,而其他字段保持不变。

FlatBuffers 的伟大之处在于它可以很好地处理前向和后向兼容性,以及文本和二进制编码(文本非常适合调试,二进制更适合纯性能),以及零成本解析步骤。

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

于 2009-11-28T13:55:43.483 回答
0

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

于 2009-11-27T19:54:03.600 回答