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

开发 后端
本文向大家介绍一下关于Flex对象持久化问题,关于Flex对象序列化和持久化的问题,很多人认为对象不能拷贝到服务器,其实浅度的拷贝是可以做到的。

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

关于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开发方法及特点解析 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2009-09-23 17:00:07

Hibernate持久

2010-08-06 11:04:06

Flex模块化

2010-06-28 18:44:54

UML对象图

2010-07-30 10:58:03

Flex数据绑定

2010-07-12 14:32:29

UML对象关系

2010-08-09 10:34:05

Flex背景

2023-10-12 13:01:29

Redis数据库

2010-07-28 14:28:57

Flex国际化

2010-08-11 09:21:37

2024-03-26 00:03:08

Redis数据RDB

2010-08-10 16:41:54

FlexJSP

2010-07-29 15:36:23

Flex安全沙箱

2010-08-04 09:26:27

Flex数据

2010-07-27 10:39:25

Flex组件

2010-07-29 13:18:45

Flex右键菜单

2009-09-24 15:42:44

Hibernate对象

2009-09-29 16:11:45

Hibernate实现

2010-08-12 11:05:33

Flex数据绑定

2010-07-27 15:49:28

Flex

2010-08-09 15:19:29

Flex滚动条
点赞
收藏

51CTO技术栈公众号