条件反序列化

时间:2010-03-18 18:30:01

标签: c++ networking serialization encoding

我仍然不确定我的问题的标题是否正确,而且很可能不是。但是我花了一些时间搜索net和stackoverflow,我找不到对我所面临的问题的良好描述。

基本上我想要实现的是能够读取一些原始字节并基于其中一些字节的值来以不同方式解释其余字节。这就是TLV在某种程度上工作的方式,你检查标签并依赖它 - 解释结果。当然,我总是可以在我的C ++代码中保留这种逻辑,但是我正在寻找一种能够将逻辑从源代码中移出的解决方案(可能是某些xml描述)。这将允许我更容易地描述不同的编码(协议)。我熟悉Protocol Buffers和其他一些序列化库,但是它们都解决了不同的问题。他们假设他们在通信的两端,而我想描述通信(某种程度)。

是否有这样的解决方案,如果没有 - 为什么不呢?我试图实施它会遇到一些固有的困难。

2 个答案:

答案 0 :(得分:3)

我相信这是一件容易的事,很多工作,但很容易。

两个重要概念:1)工厂和2)对象控件反序列化。工厂将根据ID或标记创建对象实例。创建对象后,该对象负责从数据流(或缓冲区)加载其成员。

更简单的设计可能是实现嵌套工厂。工厂根据ID调用子工厂。这可以在链中继续,直到调用最终的静态创建方法来创建适当的对象实例。

最后一个对象将传递给流(或缓冲区),它将加载其数据成员。使对象加载其成员(而不是外部对象或函数)的原因是该对象知道其成员的类型和布局。此外,还有一个位置,以便在添加或删除数据成员时,只更改对象,而不是其他外部函数(访问对象数据成员)。

希望这有帮助。

答案 1 :(得分:1)

我什么都不知道。

至于为什么没有任何东西可能归结为没有人真正需要它。通信协议不太可能以任何重大方式发生变化,那么为什么要支付对不会发生的变化做出反应的能力呢?