总有人问我关于Flex对象序列化和持久化的问题,很多人认为对象不能拷贝到服务器,其实浅度的拷贝是可以做到的。
我们来看这样一个例子:
// 取出对象
b.position = 0;
var o : Object = b.readObject();
var c : Canvas = objectToInstance(o,Canvas) as Canvas;
trace(c.width);
trace(c.height);
this.addChild(c);
}
该例子省略了保存到服务器,和从服务器中取出的过程,只是简单保存了对象,然后就立即拿出ByteArray中的对象。因为中间的ByteArray是不变的(也就是说到服务器端类型变为byte[],其中的内容也不会改变),故中间过程可以忽略。
最后的结果为100和100,说明拿出的对象的宽和高都保持住了。
那么在中间的过程加入服务器操作,道理也应如此:
然后在服务器端:
这样,我们可以随时读取这个对象,并处理,
服务器端的读取程序我就不写了,只写flex部分:
private function remoteObjectResult(event : ResultEvent) : void {
var b : ByteArray = eent.result as ByteArray;
b.position = 0;
var o : Object = b.readObject();
var c : Canvas = objectToInstance(o,Canvas) as Canvas;
trace(c.width);
trace(c.height);
this.addChild(c);
}
同理,也可以取出100和100
objectToInstance方法的内容:
关于objectToInstance方法的解释,请参考《AS3 类型强转类》