您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決Flex對象持久化問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何解決Flex對象持久化問題”這篇文章吧。
關于Flex對象持久化
關于Flex對象序列化和持久化的問題,很多人認為對象不能拷貝到服務器,其實淺度的拷貝是可以做到的。
我們來看這樣一個例子:
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); }
◆該例子省略了保存到服務器,和從服務器中取出的過程,只是簡單保存了Flex對象,然后就立即拿出ByteArray中的對象。因為中間的ByteArray是不變的(也就是說到服務器端類型變為byte[],其中的內容也不會改變),故中間過程可以忽略。
***的結果為100和100,說明拿出的Flex對象的寬和高都保持住了。
那么在中間的過程加入服務器操作,道理也應如此:
viewplaincopytoclipboardprint? privatefunctiontest():void{ varcanvas:Canvas=newCanvas(); canvas.width=100; canvas.height=100; //保存到ByteArray varb:ByteArray=newByteArray(); b.writeObject(canvas); //保存到服務器 remoteObject.Save(b); }
然后在服務器端:
viewplaincopytoclipboardprint? publicvoidSave(ByteArrayba) { //可以保存到文件 FileStreamfs=newFileStream(Path,FileMode.Createm,FileAccess.Write); fs.Write(ba.GetBuffer(),0,ba.GetBuffer().Length); fs.Close(); //===== //或者保存到數據庫 newFlexObjectDAO().Save(ba.GetBuffer); }
◆這樣,我們可以隨時讀取這個Flex對象,并處理,服務器端的讀取程序我就不寫了,只寫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方法的內容:
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:String=typeInfo.@name.toString().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; }
以上是“如何解決Flex對象持久化問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。