您好,登录后才能下订单哦!
这篇文章主要为大家展示了“如何解决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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。