学习笔记解析Flex对象持久化问题

在学习Flex的过程中,你可能会遇到Flex对象持久化方面的问题,这里和大家分享一下,很多人认为对象不能拷贝到服务器,其实浅度的拷贝是可以做到的。

成都创新互联主要从事做网站、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务沁县,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

关于Flex对象持久化

关于Flex对象序列化和持久化的问题,很多人认为对象不能拷贝到服务器,其实浅度的拷贝是可以做到的。

我们来看这样一个例子:
 

 
 
 
  1. viewplaincopytoclipboardprint?  
  2. privatefunctiontest():void{  
  3. varcanvas:Canvas=newCanvas();  
  4. canvas.width=100;  
  5. canvas.height=100;  
  6. //保存到ByteArray  
  7. varb:ByteArray=newByteArray();  
  8. b.writeObject(canvas);  
  9.  
  10. //取出对象  
  11. b.position=0;  
  12. varo:Object=b.readObject();  
  13. varc:Canvas=objectToInstance(o,Canvas)asCanvas;  
  14. trace(c.width);  
  15. trace(c.height);  
  16. this.addChild(c);  
  17. }  
  18.  

◆该例子省略了保存到服务器,和从服务器中取出的过程,只是简单保存了Flex对象,然后就立即拿出ByteArray中的对象。因为中间的ByteArray是不变的(也就是说到服务器端类型变为byte[],其中的内容也不会改变),故中间过程可以忽略。

***的结果为100和100,说明拿出的Flex对象的宽和高都保持住了。

那么在中间的过程加入服务器操作,道理也应如此:

 
 
 
  1. viewplaincopytoclipboardprint?  
  2. privatefunctiontest():void{  
  3. varcanvas:Canvas=newCanvas();  
  4. canvas.width=100;  
  5. canvas.height=100;  
  6. //保存到ByteArray  
  7. varb:ByteArray=newByteArray();  
  8. b.writeObject(canvas);  
  9. //保存到服务器  
  10. remoteObject.Save(b);  
  11. }  

然后在服务器端: 

 
 
 
  1. viewplaincopytoclipboardprint?  
  2. publicvoidSave(ByteArrayba)  
  3. {  
  4. //可以保存到文件  
  5. FileStreamfs=newFileStream(Path,FileMode.Createm,FileAccess.Write);  
  6. fs.Write(ba.GetBuffer(),0,ba.GetBuffer().Length);  
  7. fs.Close();  
  8. //=====  
  9. //或者保存到数据库  
  10. newFlexObjectDAO().Save(ba.GetBuffer);  
  11. }  
  12.  

  ◆这样,我们可以随时读取这个Flex对象,并处理,服务器端的读取程序我就不写了,只写Flex部分: 

 
 
 
  1. viewplaincopytoclipboardprint?  
  2. privatefunctiontest():void{  
  3. //取出对象  
  4. remoteObject.Load();  
  5. }  
  6.  
  7. privatefunctionremoteObjectResult(event:ResultEvent):void{  
  8. varb:ByteArray=eent.resultasByteArray;  
  9. b.position=0;  
  10. varo:Object=b.readObject();  
  11. varc:Canvas=objectToInstance(o,Canvas)asCanvas;  
  12. trace(c.width);  
  13. trace(c.height);  
  14. this.addChild(c);  
  15. }  
  16.  

同理,也可以取出100和100。

objectToInstance方法的内容:

 
 
 
  1. viewplaincopytoclipboardprint?  
  2. publicstaticfunctionobjectToInstance(object:Object,clazz:Class):*  
  3. {  
  4. varbytes:ByteArray=newByteArray();  
  5. bytes.objectEncoding=ObjectEncoding.AMF0;  
  6. varobjBytes:ByteArray=newByteArray();  
  7. objBytes.objectEncoding=ObjectEncoding.AMF0;  
  8. objBytes.writeObject(object);  
  9. vartypeInfo:XML=describeType(clazz);  
  10. varfullyQualifiedName:String=typeInfo.@name.toString().replace(/::/,".");  
  11. registerClassAlias(fullyQualifiedName,clazz);  
  12. varlen:int=fullyQualifiedName.length;  
  13. bytes.writeByte(0x10);//0x10isAMF0for"typedobject(classinstance)"  
  14. bytes.writeUTF(fullyQualifiedName);  
  15. bytes.writeBytes(objBytes,1);  
  16. bytes.position=0;  
  17. varresult:*=bytes.readObject();  
  18. returnresult;  
  19.  
  20. }  

【编辑推荐】

  1. 实例解析Flex字体的使用
  2. FlexBuilder4十大新特性闪亮登场
  3. 学习总结 在Flex中如何嵌入Flex字体
  4. 揭开Flex正则表达式的神秘面纱
  5. FlexBuilder开发方法及特点解析 

网站标题:学习笔记解析Flex对象持久化问题
文章来源:http://www.36103.cn/qtweb/news31/5931.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联