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

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

23.6.對象序列化

2024-04-27 13:52:33
字體:
來源:轉載
供稿:網友
23.6.1.問題
我想對自定義對象進行序列化并保存到硬盤驅動器的文件中。
23.6.2.解決辦法
通過class-alias注冊自定義類,使用ActionScript Message Format (AMF) 編碼序列化對象,并使用FileStream.writeObject方法把對象存儲到文件上。
23.6.3.討論
使用AIR文件系統API,你可以把經過AMF編碼序列化過的對象寫入文件流緩沖區中。

ActionScript語言中大多數內建對象類型比如String和Boolean都自動支持序列化。這些類型同通過AMF被編碼為二進制格式,當經過反序列化可以恢復原來的值。然而自定義對象是不自動支持序列化的,要啟動自定義對象序列化支持,你需要用registerClassAlias 方法用一個類別名注冊此類,或者在類定義前申明這個[RemoteClass]元數據標簽。

假定你的程序要把用戶信息作為一個對象進行顯示,可過一段時間被同一個程序或者被其他程序載入,這些程序應已知道如何處理該對象,要表現用戶信息的自定義對象看起來大概是下面這樣:
+展開
-ActionScript
package com.oreilly.flexcookbook {
[RemoteClass]
[Bindable]
public class UserData {
public var firstName:String;
public var lastName:String;
public var age:Number;
public var sessionLength:Number;
public function UserData( firstName:String = "",lastName:String = ""){
this.firstName = firstName;
this.lastName = lastName;
}
}
}

每次你的程序被用戶打開時,一個新的UserData對象被創建,等待用戶輸入信息,通??梢员4孢@些信息以特定的格式保存到文本文件上,但是你也可以序列化對象到文件上,從而可輕易的以對象類型讀取,不必要解析字符串,重置UserData新實例屬性。要序列化對象且通過反序列化保留其屬性值,需要使用[RemoteClass]元數據標簽注冊它。

在類申明前插入[RemoteClass] 元數據標簽,可啟動此類在使用AMF序列化和反序列化中能保持類型信息和屬性值。你也可以在變量定義前加上[Transient]元數據標簽,指示此變量不會被序列化。比如上面例子中的sessionLength屬性每次程序運行時都會更新,因為沒必要進行保存,你可以把此屬性標記為transient屬性拒絕被序列化:
+展開
-ActionScript
package com.oreilly.flexcookbook {
[RemoteClass]
public class UserData {
public var firstName:String;
public var lastName:String;
public var age:Number;
[Transient]
public var sessionLength:Number;
public function UserData( firstName:String = "",lastName:String = ""){
this.firstName = firstName;
this.lastName = lastName;
}
}
}

使用FileStream.writeObject方法把序列化自定義對象寫到文件里,當使用writeObject和readObject 寫入和讀取二進制數據默認所用的編碼格式是AMF 3 規范。通過設置FileStream.objectEncoding屬性,你可以使用AMF 0 格式,下面的例子保存用戶信息到擴展名為.user的文件上:
+展開
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:Script>
<![CDATA[
import com.oreilly.flexcookbook.UserData;
private var userData:UserData = new UserData();
private static const EXT:String = ".user" ;
private function submitHandler():void {
userData.firstName = firstField.text;
userData.lastName = lastField.text;
userData.age = ageField.value;
saveUserData();
}
private function saveUserData():void
{
var fnm:String = userData.firstName + "_"+userData.lastName + EXT;
var file:File =File.desktopDirectory.resolvePath( fnm );
var stream:FileStream = new FileStream();
stream.open( file, FileMode.WRITE );
stream.writeObject( userData );
stream.close();
}

]]>
</mx:Script>
<mx:Form>
<mx:FormItem label="First Name:">
<mx:TextInput id="firstField"
change="{submitBtn.enabled = firstField.text != ''}"/>

</mx:FormItem>
<mx:FormItem label="Last Name:">
<mx:TextInput id="lastField"
change="{submitBtn.enabled = lastField.text != ''}"/>

</mx:FormItem>
<mx:FormItem label="Age:">
<mx:NumericStepper id="ageFieldminimum="18maximum="110" />
</mx:FormItem>
<mx:Button id="submitBtnlabel="submitenabled="falseclick="submitHandler();" />
</mx:Form>
</mx:WindowedApplication>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奉化市| 连山| 上栗县| 松江区| 托里县| 铜山县| 芜湖县| 类乌齐县| 和静县| 沽源县| 界首市| 云龙县| 仁怀市| 延寿县| 资兴市| 贵南县| 察哈| 简阳市| 常州市| 七台河市| 南京市| 昌吉市| 莎车县| 天长市| 康定县| 班玛县| 清河县| 女性| 称多县| 盘锦市| 瓮安县| 澎湖县| 绍兴市| 萝北县| 芦溪县| 六盘水市| 长沙县| 民勤县| 汨罗市| 密云县| 浙江省|