如何获取AMF3对象类名
来源:互联网 发布:tumblr视频下载软件 编辑:程序博客网 时间:2024/06/05 20:44
对不熟悉AMF3的人来说,这名词有点玄乎,AMF3不过两个函数而已
//编码(把对象序列化成AMF3)
1 bateArray.writeObject(obj:Object):void
//解码 (反序列化,获取对象)
2 bateArray.readObject():Object
如果需要序列化的对象就是一个哈希map(key-value的集合),那么一切正常
但是如果你要序列化一个Class,同时把这个Class的类名也序列化到ByteArray中,那么
光是bateArray.writeObject是不能满足需求的,如果需要写的对象是一个Class的实例,writeObject则会把这个Class里面的public变量抽出来放入到一个新的哈希map里(Object),在Object里新建与类的public成员变量同名的动态属性,并赋值,例如一个ModeClass类,它有两个属性:
private var id:int = 10000;
public var nick:String = "wewell"
当把这个类的实例打包成amf3的时候,实际状况其实变成了这样:
bateArray.readObject({nick:"wewell"})
这样,打包的amf3对象其实已经没有了类名(同时,static成员,const的成员,private成员,所有方法,包括public get 方法都会被忽略掉)
而如果为了实现一些类似RPC的调用过程,直接打类打包时,这就要搬外援了,这个外援就是:public function registerClassAlias(aliasName:String, classObject:Class):void
在writeObject之前,对需要打包的类调用一次registerClassAlias,就能达到存取类的目的了(get方法的值也可正常存取)
示例代码:
//AMF3对象编码
registerClassAlias("ModeClass", ModeClass);
var modeClass:ModeClass = new ModeClass();
var ba:ByteArray = new ByteArray();
ba.writeObject(modeClass); //默认情况下把类的public变量抽出来打包成一个map (public变量对应Object动态属性)
//AMF3对象解码
ba.position = 0;
var mode:* = ba.readObject();
trace(mode is ModeClass);//true
trace(ba.toString());
trace(getQualifiedClassName(mode));//ModeClass
//var cls:Class = getClassByAlias(getQualifiedClassName(mode));
//var amf:Object = new cls() as ModeClass;
- 如何获取AMF3对象类名
- 如何获取AMF3对象类名
- js如何获取对象中的属性名
- ios获取对象类名
- C++中如何获取对象的名字(变量名,注意不是类名)
- AMF3
- 如何通过设备名获取设备对象指针
- php 获取对象的类名 get_class
- 在类中获取对象名
- js通过类名获取元素对象
- java 反射通过类名获取对象
- 根据类名,获取接口对象
- QT根据类名获取对象(元对象反射)
- java利用反射获取对象类名以及对象属性名
- As中获取对象类名的常用方法
- AS3获取对象类名,getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName
- js:类名/id/name获取对象的实现
- 从配置文件中获取类名,利用反射创建对象
- 敏捷,从我了解的一些谈谈
- 托管代码和非托管代码
- ORACLE 与 mysql 的区别
- 真正的.NET环境下的全局键盘鼠标Hook代码
- ext行编辑和多行操作
- 如何获取AMF3对象类名
- OO+UML应该怎么写文档?
- test
- android app生涯
- 关于Serializable的serialVersionUID
- oracle 操作
- Eclipse ShotCut[From internet]
- 串行&并行程序在效率上的简单比较
- weblogic与spring事务集成过程