as3 registerClassAlias的作用
sshong 发表于2013年2月16日 17:51:52 更新于2013年2月17日 13:45:33
很多人对as3的registerClassAlias不太了解,而且网上都是摘抄的官方文档,说的不是很明白。我这里简单说下。

所谓registerClassAlias,要明白他的使用背景。

当前后台或者两个独立程序之间传递数据vo时,以前的方案有如xml(soap)、json。
这些方案都比较臃肿,特别是soap。
于是adobe推出了AMF,采用二进制进行数据传递(类似的框架有google的protobuf)。

如果要传递自定义数据类型实现解码端自动映射,肯定必须在序列化端加入额外信息,同时解码端要能根据这些额外信息自动转码映射。

说到这应该明白了,registerClassAlias就是用来干这活的。

序列化端,在序列化之前registerClassAlias("xxx", classA),会把这个别名信息加入到二进制数据中。
解码端,在解码之前同样registerClassAlias("xxx", classB),则会把这个二进制数据自动生成一个classB对象,当然前提是classB必须包含classA的所有属性。

大概意思如下(通常序列化端和解码端是不同的程序,甚至不同的语言):
//序列化端
registerClassAlias("hahaha", DataVO);
var vo:DataVO = new DataVO();
var ba:ByteArray = new ByteArray();
ba.writeObject(vo);
ba.position = 0;

//解码端
registerClassAlias("hahaha", DataVO);
var vo2:Object = ba.readObject();
if(vo2 is DataVO) {
    trace("vo2 is DataVO", vo2.p1, vo2.p2);
}
else {
    trace("vo2 isn't DataVO");
}

附:
adobe registerClassAlias api说明
protobuf项目地址

registerClassAlias前后的二进制数据对比
registerClass
标签:序列化通讯分类:As3&Flex阅读:7229
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅