flash -> AMF -> java 的对象映射关系
flash能够提供的类型:
{
import flash.utils.ByteArray;
public class ValueObject
{
public var stringvalue:String;
public var intvalue :Int;
public var booleanvalue:Boolean;
public var dateValue:Date;
public var numberValue:Number;
public var bytesValue:ByteArray;
public function ValueObject()
{
}
}
}
{
public class ObjectObject
{
public var valueObject:ValueObject;
public var objectObject:ObjectObject;
public function ObjectObject()
{
}
}
}
{
import mx.collections.ArrayCollection;
public class ArrayObject
{
public var arrayValue:Array;
public var collectionValue:ArrayCollection;
public function ArrayObject()
{
}
}
}
接收情况分析:
1. 由于接收方使用了amf,默认带了压缩,所以flash传输的基本类型、binary类型、array类型无法解析,只能接收object
2. 接收端使用java,newInstance()必须是public 单独的 pojo类,不能嵌入其他的类
3. java pojo除了field是public之外,还必须有getset,否则beanmap无法找到对应的property
4. ArrayCollection -> java:ArrayCollection
5. ByteArray -> byte[]
6. Array -> object[]
7. 由于java不支持泛型的参数获取类型,所以collection无法实现。
8. ArrayList.ToArray() = object[] , 无法转化为特定的 xxx[],导致了 反序列化的时候丢失了类的信息,无法实现Array的映射为java对象。
9. flash接收对象使用ByteArray.readObject, 之前调用registerAlias,让flash实现强转型。
http://www.adobe.us/livedocs/flex/3_cn/langref/flash/net/package.html#registerClassAlias()
10. java用amf接收,会出现粘包的问题。
http://bbs.9ria.com/viewthread.php?tid=45637
http://bbs.9ria.com/viewthread.php?action=printable&tid=46012
testcase:
serialize--------------
1. valueobject - pass
2. objectobject - pass
3. arrayobject- pass
deserialize --------------
1. valueobject- pass
2. objectobject- pass
3. arrayobject- pass