分布式通讯的串行化和ICE串行化支持

 一、关于串行化
  主要是将一个内存中不连续的对象变成一个连续的对象。

二、现在一般串行化方法
  1.语言本身提供的串行化
    这个像高级语言提供串行化方法
      比如java通过implements Serializable就可以实现
      C# BinaryFormatter类实现。
    这个做法缺点是不能跨语言和平台通讯。
 
  2.通过工具提供串行化
      一般通过接口描述语言生成所要的对象
        比如Web Service通过WSDL生成目标对象,这个生成的结构基于SOAP的,结构比较大。
        CORBA通过IDL生成各种目标结构。
        
      这种做法的优点是对于各种语言支持好
      缺点是要平台有各自串行化和反串行化的支持算法。

三、这里我主要讨论一下ICE的串行化算法
   ICE的串行化算法主要是通过工具提供串行化,这种算法串行化的特点是
   编码简单,效率高,结构紧凑,传输方便。
   
   ICE支持序列化的基本类型
     bool,byte,short,int,long64,float,double
   高级类型:
     string,vector,map
   结构类型:
     enum,struct,class,iceexecption
   
   ICE基本类型编码规范
   ICE不使用网络字节序,使用的常用的低字节序,主要是对主流CPU(X86体系)字节序比较友好
     bool 单个字节,值1 表示true, 0 表示false
     byte 一个不作解释的字节
     short 两个字节(LSB、MSB)
     int 四个字节(LSB .. MSB)
     long 八个字节(LSB .. MSB)
     float 四个字节(23 位小数尾数、 8 位指数、符号位)
     double 八个字节(52 位小数尾数、 11 位指数、符号位
     尺寸
       在数据编码中涉及到的许多类型,以及若干协议消息的成分,都有一个
       与之相关联的尺寸或计数。尺寸是非负的数值。尺寸和计数是按下面两种
       方式中的一种进行编码的:
          1. 如果元素的数目少于255,尺寸就被编码成单个byte,指示元素的数目。
          2. 如果元素的数目多于或等于255,尺寸就被编码成一个值为255 的
             byte,再跟上一个int, 指示元素的数目。
          255 以下的计数只需要一个字节,而不是四个字节。相应的代价是,
          大于254 的计数需要五个字节,而不是四个字节。但是,对于长度大于254 的序列或串而言,
          多出的一个字节无关紧要。
     string
       尺寸+实际字符串,(NULL)使用尺寸0表示
     vector;
       尺寸+实际数据。
     enum:
        如果枚举有1 - 127 个枚举符,枚举值被整编成一个byte。
        如果枚举有128 - 32767 个成员,枚举值被整编成一个short。
        如果枚举的成员多于32767 个,枚举值被整编成一个int。
        枚举值就是对应的枚举符的序数值,第一个枚举符的值被编码成零。
     struct:
        结构的各个成员按照各自的类型,以它们在struct 声明中的出现次序进行编码。
     class:
        class类型比较复杂,和ICE平台规范相关比较多,这里就不在讨论,原理一样
        如果要详细的编码规范,请参看
        http://www.zeroc.com/download/Ice/3.3/Ice-3.3.1.pdf

 

现在我的云计算引擎参照了ICE编码方式

 

详细代码见

http://www.svnhost.cn/Project/Detail-4657.shtml


云计算引擎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值