国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

18.5.使用IExternalizable接口自定義序列化

2024-04-27 13:52:25
字體:
來源:轉載
供稿:網友
18.5.1. 問題
當通過RemoteObject 或DataService 發送強類型數據時我想進行自定義決定哪些屬性將被發送過去。
18.5.2. 解決辦法
使用ActionScript 3 API flash.utils.IExternalizable,它兼容java.io.IExternalizable API.
18.5.3. 討論
通常使用可序列化類是在序列化中包含只讀的屬性。雖然在服務端可有多種方式完成此目的,但是在客戶端就沒有什么方法了。因此最好的辦法就是在客戶端和服務端都有效,你可以使你的類進行自定義雙向序列化。

這種方法相對簡單,在客戶端ActionScript 類只要實現flash.utils.IExternalizable。這個API 需要兩個方法, readExternal 和writeExternal , 分別取得flash.utils.IDataInput 和flash.utils.IDataOutput 數據流,在服務端是由實現java.io.Externalizable 接口的Java 類實現這兩個方法, 它也有兩個readExternal 和writeExternal ,分別取得java.io.ObjectInput 和java.io.ObjectOutput 數據流。

雖然IDataInput和IDataOutput類讓你設計自己的協議,但對于基本的數據類型如byte, int, 和UTF-8-編碼Strings,可以充分利用已實現的readObject 和writeObject 方法。作為這些使用AMF 3有效地進行序列化和反序列化ActionScript 對象。(記住AMF 3 有三大優點:你可以只發送對象引用以避免多余的序列化實例,保持對象關系和處理周期性引用。你可以只發送對象特性,這樣當實例重復時類型描述只發送一次。你可以只發送重復的字符串引用以避免產生冗余信息.)你甚至可以在自定義序列化代碼中完全省略屬性名稱,通過固定的順序發送屬性值。

注意
這個例子只關注于只讀屬性的序列化,不過自定義序列化還有很多其他方面的用途,比如省略屬性,避免多余的序列化信息,或包含來自自定義名稱空間的屬性。

注意java 中的writeExternal 方法如何寫:
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeObject(id);
out.writeObject(name);
out.writeObject(description);
out.writeInt(price);
}

對應的客戶端ActionScript 的readExternal 方法:
+展開
-ActionScript
public function readExternal(input:IDataInput):void
{
_id = input.readObject() as String;
name = input.readObject() as String;
description = input.readObject() as String;
price = input.readInt();
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 子洲县| 庆城县| 六盘水市| 睢宁县| 砀山县| 商河县| 宁武县| 泸西县| 内江市| 正蓝旗| 邯郸市| 辽中县| 台中市| 海晏县| 林周县| 宁南县| 仙游县| 三明市| 新源县| 承德市| 遂昌县| 高阳县| 探索| 偏关县| 澄江县| 黔江区| 墨脱县| 崇阳县| 仙游县| 阳东县| 金湖县| 韶关市| 仙居县| 沙河市| 合阳县| 洛扎县| 岳池县| 松江区| 丰县| 天津市| 光泽县|