温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-06 11:04:40 来源:亿速云 阅读:96 作者:小新 栏目:编程语言

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI