package {
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName;
import flash.net.registerClassAlias;
public class CopyUtil{
public static function clone(object:Object):Object{
var qClassName:String = getQualifiedClassName(object);
var objectType:Class = getDefinitionByName(qClassName) as Class;
registerClassAlias(qClassName, objectType);
var copier : ByteArray = new ByteArray();
copier.writeObject(object);
copier.position = 0;
return copier.readObject();
}
}
}
//对象属性拷贝和比较
package com.rlkems.util
{
import flash.utils.ByteArray;
import mx.collections.ArrayCollection;
import mx.utils.ObjectUtil;
/**
* model对象拷贝工具
*
* */
public class BeanUtils
{
public function BeanUtils()
{
}
/**
* 对象属性拷贝
*
* */
public static function copyProperties(dest:Object, orig:Object):void{
if(orig is ArrayCollection){
return;
}
var classInfo:Object = ObjectUtil.getClassInfo(orig);
var properties:Array = classInfo.properties;
for (var j:int = 0; j < properties.length; j++)
{
var prop:* = properties[j];
if(dest.hasOwnProperty(prop.toString())){
if(orig[prop] is Date){
dest[prop] = orig[prop];
}else{
var type:String = orig[prop] == null ? "null" : typeof(orig[prop]);
if("object" == type){
copyProperties(dest[prop],orig[prop]);
}else{
try{
dest[prop] = orig[prop];
}catch(e:Error){
trace(e.message);
}
}
}
}
}
}
/**
* 比较2个对象是否内容相同(只是进行字节比较);
* */
public static function compareObject(obj1:Object,obj2:Object):Boolean
{
var buffer1:ByteArray = new ByteArray();
buffer1.writeObject(obj1);
var buffer2:ByteArray = new ByteArray();
buffer2.writeObject(obj2);
// compare the lengths
var size:uint = buffer1.length;
if (buffer1.length == buffer2.length) {
buffer1.position = 0;
buffer2.position = 0;
// then the bits
while (buffer1.position < size) {
var v1:int = buffer1.readByte();
if (v1 != buffer2.readByte()) {
return false;
}
}
return true;
}
return false;
}
}
}