成都网站建设设计

将想法与焦点和您一起共享

如何解决Flex对象持久化问题

这篇文章主要为大家展示了“如何解决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对象持久化问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网页名称:如何解决Flex对象持久化问题
网站路径:http://chengdu.cdxwcx.cn/article/jdipop.html