关于编组的好例子,文章和书籍

时间:2011-06-06 23:20:01

标签: c++ c serialization marshalling rpc

在为基于智能卡的加密狗开发软件保护库的过程中,我意识到我需要在加密狗内的客户端应用程序和代码之间来回传输一些树状数据结构。

那么,在使用Web服务时,XML-RPC或JSON-RPC等技术是合理的考虑方式。但是,智能卡等嵌入式设备并非如此。您需要使用一些二进制格式来优化内存使用并获得良好的性能。

我想我需要的是实现一些二进制数据编组算法。我不喜欢重新发明整个轮子的想法,我非常确定有关于这些编组问题的好书,文章和例子。

你会推荐什么?

UPD。我在Linux上使用C和C ++,但问题是关于编组算法的一般信息。

6 个答案:

答案 0 :(得分:7)

您可以将ASN.1视为一般序列化解决方案。 有free books和免费实施:asn1ca2c,snacc。

但ASN.1是一个巨大的。更简单的protobuf或xdr可以完成你的任务。

答案 1 :(得分:7)

Google's Protobuf

首先,我要区分编组和RPC(使用编组)。 Google Protobuf是通过网络封送的最佳解决方案。它具有最小的占用空间,并以闪电般的速度进行编码/解码。

如果您仍然对如何实施高效编组检查感兴趣,请查看protobuf encoding的文档。
编码页面的一个例子是varint。 Varint是protobuf以二进制格式编码无符号整数的方式。 Varint针对小数量进行了优化。例如,1仅使用线路上的一个字节,而300使用两个字节 当然,protobuf设计者意识到我们经常使用整数作为位掩码等。因此,它们还提供了一个总是四个字节的整数数据类型(这样,设置了msb位的掩码不会消耗额外的空间)。

关于如何使用protobufs实现RPC,还有ample documentation

答案 2 :(得分:7)

您可能还想查看Messagepack(http://msgpack.org)。它声称比Protobuf快4倍。与Protobuf相比,这个库也支持继承。

答案 3 :(得分:5)

关于您所针对的平台/语言,您的问题中没有很多背景......但是!

最受欢迎的是(是?)DCOM和CORBA。有嵌入式CORBA .....你可以使用(ACE TAO库)中的TAO之类的东西

但是如果这个规模相当小,你可以自己序列化,要记住的主要事情是版本化序列化格式,这样你就可以改变它并支持旧版本(如果这是你项目中的一个问题)

答案 4 :(得分:3)

序列化/编组和树状数据结构一起听起来像是一个很大的问题。以下是我将如何开始解决问题的一些方面:

  1. 考虑数据的编码。用于int传输或传输的4个字节为ascii?
  2. 考虑是否需要传输整个数据或仅在两个树数据结构之间同步
  3. 每一位数据都需要知道它在树结构中的位置。识别数据位将对此问题有很大帮助。
  4. 考虑需要转移什么?
    • 只是树节点内的数据?
    • 更改树形结构?
    • 整棵树?
    • 数据的位置/ ID?
  5. 识别数据
    • 使用从根到树节点的路径?
    • 使用子树?
    • 使用简单数据节点
    • 识别树节点内的元素?
  6. 考虑如何在树中发布数据
    • 也许可以编写提供所有数据的界面?
    • 您可以使用算法递归遍历所有数据吗
    • 数据内部是否有指针无法轻易转移?
  7. 显然有些像lib protobuf这样的lib可以帮助......

答案 5 :(得分:2)

您可以考虑使用Thrift