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

ezp*_*sso 18 c c++ serialization rpc marshalling

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

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

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

你会推荐什么?

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

小智 7

您可以将ASN.1视为一般的序列化解决方案.有免费的书籍和免费实现:asn1c,a2c,snacc.

但ASN.1是一个巨大的.更简单的protobuf或xdr可以很好地完成您的任务.


def*_*ode 7

谷歌的Protobuf

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

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

还有很多关于如何使用protobufs实现RPC的文档.


Jon*_*Dee 7

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


Kei*_*las 5

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

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

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