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

首頁(yè) > 網(wǎng)站 > WEB開(kāi)發(fā) > 正文

23.6.對(duì)象序列化

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

ActionScript語(yǔ)言中大多數(shù)內(nèi)建對(duì)象類型比如String和Boolean都自動(dòng)支持序列化。這些類型同通過(guò)AMF被編碼為二進(jìn)制格式,當(dāng)經(jīng)過(guò)反序列化可以恢復(fù)原來(lái)的值。然而自定義對(duì)象是不自動(dòng)支持序列化的,要啟動(dòng)自定義對(duì)象序列化支持,你需要用registerClassAlias 方法用一個(gè)類別名注冊(cè)此類,或者在類定義前申明這個(gè)[RemoteClass]元數(shù)據(jù)標(biāo)簽。

假定你的程序要把用戶信息作為一個(gè)對(duì)象進(jìn)行顯示,可過(guò)一段時(shí)間被同一個(gè)程序或者被其他程序載入,這些程序應(yīng)已知道如何處理該對(duì)象,要表現(xiàn)用戶信息的自定義對(duì)象看起來(lái)大概是下面這樣:
+展開(kāi)
-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;
}
}
}

每次你的程序被用戶打開(kāi)時(shí),一個(gè)新的UserData對(duì)象被創(chuàng)建,等待用戶輸入信息,通常可以保存這些信息以特定的格式保存到文本文件上,但是你也可以序列化對(duì)象到文件上,從而可輕易的以對(duì)象類型讀取,不必要解析字符串,重置UserData新實(shí)例屬性。要序列化對(duì)象且通過(guò)反序列化保留其屬性值,需要使用[RemoteClass]元數(shù)據(jù)標(biāo)簽注冊(cè)它。

在類申明前插入[RemoteClass] 元數(shù)據(jù)標(biāo)簽,可啟動(dòng)此類在使用AMF序列化和反序列化中能保持類型信息和屬性值。你也可以在變量定義前加上[Transient]元數(shù)據(jù)標(biāo)簽,指示此變量不會(huì)被序列化。比如上面例子中的sessionLength屬性每次程序運(yùn)行時(shí)都會(huì)更新,因?yàn)闆](méi)必要進(jìn)行保存,你可以把此屬性標(biāo)記為transient屬性拒絕被序列化:
+展開(kāi)
-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方法把序列化自定義對(duì)象寫到文件里,當(dāng)使用writeObject和readObject 寫入和讀取二進(jìn)制數(shù)據(jù)默認(rèn)所用的編碼格式是AMF 3 規(guī)范。通過(guò)設(shè)置FileStream.objectEncoding屬性,你可以使用AMF 0 格式,下面的例子保存用戶信息到擴(kuò)展名為.user的文件上:
+展開(kāi)
-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>
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沾化县| 囊谦县| 张家港市| 安乡县| 星子县| 宕昌县| 赤城县| 溧阳市| 岑溪市| 原平市| 桦甸市| 绥芬河市| 抚远县| 汽车| 安康市| 方城县| 沁源县| 视频| 乐至县| 萍乡市| 蒲城县| 吴忠市| 康保县| 闻喜县| 宁城县| 丰县| 盐山县| 二连浩特市| 凤阳县| 临沂市| 吉林省| 灵寿县| 平顺县| 南江县| 嘉善县| 普陀区| 济宁市| 海城市| 南安市| 武陟县| 钦州市|