flash -> AMF -> java 的对象映射关系

flash能够提供的类型:

 

代码
package
{
    
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()
        {
        }
    }
}

 

 

package
{
    public 
class  ObjectObject
    {
        public var valueObject:ValueObject;
        public var objectObject:ObjectObject;
        
        public function ObjectObject()
        {
        }
    }
}

 

代码
package
{
    
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 

 

 

 

你可能感兴趣的:(Flash)