新聞中心
在學(xué)習(xí)Flex的過程中,你可能會遇到Flex對象持久化方面的問題,這里和大家分享一下,很多人認(rèn)為對象不能拷貝到服務(wù)器,其實(shí)淺度的拷貝是可以做到的。

成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)沁縣,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
關(guān)于Flex對象持久化
關(guān)于Flex對象序列化和持久化的問題,很多人認(rèn)為對象不能拷貝到服務(wù)器,其實(shí)淺度的拷貝是可以做到的。
我們來看這樣一個例子:
- viewplaincopytoclipboardprint?
- privatefunctiontest():void{
- varcanvas:Canvas=newCanvas();
- canvas.width=100;
- canvas.height=100;
- //保存到ByteArray
- varb:ByteArray=newByteArray();
- b.writeObject(canvas);
- //取出對象
- b.position=0;
- varo:Object=b.readObject();
- varc:Canvas=objectToInstance(o,Canvas)asCanvas;
- trace(c.width);
- trace(c.height);
- this.addChild(c);
- }
◆該例子省略了保存到服務(wù)器,和從服務(wù)器中取出的過程,只是簡單保存了Flex對象,然后就立即拿出ByteArray中的對象。因?yàn)橹虚g的ByteArray是不變的(也就是說到服務(wù)器端類型變?yōu)閎yte[],其中的內(nèi)容也不會改變),故中間過程可以忽略。
***的結(jié)果為100和100,說明拿出的Flex對象的寬和高都保持住了。
那么在中間的過程加入服務(wù)器操作,道理也應(yīng)如此:
- viewplaincopytoclipboardprint?
- privatefunctiontest():void{
- varcanvas:Canvas=newCanvas();
- canvas.width=100;
- canvas.height=100;
- //保存到ByteArray
- varb:ByteArray=newByteArray();
- b.writeObject(canvas);
- //保存到服務(wù)器
- remoteObject.Save(b);
- }
然后在服務(wù)器端:
- viewplaincopytoclipboardprint?
- publicvoidSave(ByteArrayba)
- {
- //可以保存到文件
- FileStreamfs=newFileStream(Path,FileMode.Createm,FileAccess.Write);
- fs.Write(ba.GetBuffer(),0,ba.GetBuffer().Length);
- fs.Close();
- //=====
- //或者保存到數(shù)據(jù)庫
- newFlexObjectDAO().Save(ba.GetBuffer);
- }
◆這樣,我們可以隨時(shí)讀取這個Flex對象,并處理,服務(wù)器端的讀取程序我就不寫了,只寫Flex部分:
- viewplaincopytoclipboardprint?
- privatefunctiontest():void{
- //取出對象
- remoteObject.Load();
- }
- privatefunctionremoteObjectResult(event:ResultEvent):void{
- varb:ByteArray=eent.resultasByteArray;
- b.position=0;
- varo:Object=b.readObject();
- varc:Canvas=objectToInstance(o,Canvas)asCanvas;
- trace(c.width);
- trace(c.height);
- this.addChild(c);
- }
同理,也可以取出100和100。
objectToInstance方法的內(nèi)容:
- viewplaincopytoclipboardprint?
- publicstaticfunctionobjectToInstance(object:Object,clazz:Class):*
- {
- varbytes:ByteArray=newByteArray();
- bytes.objectEncoding=ObjectEncoding.AMF0;
- varobjBytes:ByteArray=newByteArray();
- objBytes.objectEncoding=ObjectEncoding.AMF0;
- objBytes.writeObject(object);
- vartypeInfo:XML=describeType(clazz);
- varfullyQualifiedName:[email protected]().replace(/::/,".");
- registerClassAlias(fullyQualifiedName,clazz);
- varlen:int=fullyQualifiedName.length;
- bytes.writeByte(0x10);//0x10isAMF0for"typedobject(classinstance)"
- bytes.writeUTF(fullyQualifiedName);
- bytes.writeBytes(objBytes,1);
- bytes.position=0;
- varresult:*=bytes.readObject();
- returnresult;
- }
【編輯推薦】
- 實(shí)例解析Flex字體的使用
- FlexBuilder4十大新特性閃亮登場
- 學(xué)習(xí)總結(jié) 在Flex中如何嵌入Flex字體
- 揭開Flex正則表達(dá)式的神秘面紗
- FlexBuilder開發(fā)方法及特點(diǎn)解析
文章名稱:學(xué)習(xí)筆記解析Flex對象持久化問題
轉(zhuǎn)載源于:http://m.fisionsoft.com.cn/article/ccscgdd.html


咨詢
建站咨詢
