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