弃天笑的程序世界

专注于游戏开发。AS3、JavaScrirpt/TypeScript、Java服务端、持续集成,自动化流程...

[AS3]registerClassAlias的用法

registerClassAlias在利用AMF3进行序列话网络通讯中,是非常有用的。需要把客户端的对象直接传送到服务器得时候,保留该对象的类(类型)。 这样的话,就可以传送自定义对象或者系统自带对象。
具体的使用方法,官方有详细地用法。这里我只说说自己的一些理解。
readObject方法对构造器有参数的类,是会出错的,会弹出参数数量不匹配这个错误。因为还原对象进行反射的时候,是默认没有参数的给构造器的。这也是有些人 讨论Sprite等对象不能进行深度拷贝的原因
所以在使用AMF3进行序列话的时候要注意这个了,还有一个就是,如果那个类包含了多个类,也就是个复合类,那么里面的那个复合类,也必须进行registerClassAlias,例如
  1. package
  2. {
  3.     import flash.geom.Point;
  4.     
  5.     public class Test
  6.     {
  7.         public var name:String;
  8.         public var point:Point;
  9.     }
  10. }
  11. 这样需要写两条语句才能完全把Test序列化
  12. registerClassAlias("point",Point);
  13. registerClassAlias("test",Test)
具体使用例子,参考官方例子,下面是摘录出来的


此示例使用 registerClassAlias() 函数为 ExampleClass 注册一个别名  ( com.example.eg )。 由于为类注册了别名,因此可以将对象作为 ExampleClass 的实例反序列化,且代码将输出  true。 如果删除 registerClassAlias() 调用,则代码将输出 false

  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.net.registerClassAlias;
  4.     import flash.utils.ByteArray;
  5.     public class RegisterClassAliasExample extends Sprite {
  6.         public function RegisterClassAliasExample() {
  7.             registerClassAlias("com.example.eg", ExampleClass);
  8.             var eg1:ExampleClass = new ExampleClass();
  9.             var ba:ByteArray = new ByteArray();
  10.             ba.writeObject(eg1);
  11.             ba.position = 0;
  12.             var eg2:* = ba.readObject();
  13.             trace(eg2 is ExampleClass); // true
  14.         }
  15.     }
  16. }



阅读更多
版权声明:本文为博主原创文章,转载必须声明出处和作者。地址:http://blog.csdn.net/sujun10 作者:弃天笑 https://blog.csdn.net/sujun10/article/details/2750977
文章标签: 服务器 通讯 网络
个人分类: Flash/Flex/AS3
上一篇[AS3]Flash Socket底层接受数据的初级处理
下一篇发些今年的作品:网络斗地主
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭