首页 > 其他 > 详细

通过序列化拷贝对象

时间:2014-12-05 02:08:33      阅读:253      评论:0      收藏:0      [点我收藏+]

前两天做项目的时候需要对某个对象进行复制,但是复制的对象不需要源对象的某些属性值,便在论坛上提问,最后根据大家的回答找到一个比较适合自己的方法,遂记录下来。同时也谢谢各位的回答。

?

有如下这些类(实际的对象之间的关联要比这个复杂):

?

    class A {  
        private Long id;  
        private List<B> listB;  
        private D d;  
        ......  
    }  
      
    class B {  
        private Long id;  
        private A a;  
        private List<C> listC;  
        ......  
    }  
      
    class C {  
        private Long id;  
        private B b;  
        ......  
    }  
      
    class D {  
        private Long id;  
        private A a;  
        ......  
    }  

?

?

现在我需要将A进行复制,但是不需要所有对象的id属性的值。

最后我选择了通过序列化来复制对象,方法如下:

?

首先建立一个基类,基类实现Serializable接口,并有一个栏位“id“,将”id“用transient修饰

?

public class Entity implements Serializable {
	private transient Long id;
	//getter and setter
        ...
}

?然后将所有类都继承这个基类,如果我需要对A进行复制,则通过下面这段代码即可

?

?

    public static Object deepCopy(Object object) throws IOException, ClassNotFoundException{
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //Serialize
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(object);
	oos.close();
	bos.close();
	//Deserialize
        byte[] data = bos.toByteArray();
	ByteArrayInputStream bais = new ByteArrayInputStream(data);
	ObjectInputStream ois = new ObjectInputStream(bais);
	Evaluation copy = (Evaluation) ois.readObject();
	ois.close();
	bais.close();
	return copy ;
    }

?

deepCopy方法就是用序列化的方法来实现对象的深拷贝,其返回的对象即为我需要的这个对象的拷贝。

我觉得这种方法算是需要的代码量最小的,对现在的项目改动最少的方法。

如果大家有更好的方法或者觉得这个方法有改进的地方,请留言。

?

问题的地址:http://www.iteye.com/problems/120240

?

参考资料:
http://www.oschina.net/translate/serialization-in-java
http://liuwang126.iteye.com/blog/272595
http://kentkwan.iteye.com/blog/739514
http://my1988.2219.heart.blog.163.com/blog/static/8383725220121190213943/

?

通过序列化拷贝对象

原文:http://julianyuan.iteye.com/blog/2163252

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!