使用对象序列化和反序列化实现深度克隆

java对象进行克隆,分为浅克隆和深克隆

浅克隆需要实现java.lang.Cloneable接口,并重写java.lang.Object.clone()方法,此处略过

深度克隆:在浅度克隆的基础上,对于要克隆的对象中的非基本数据类型的属性对应的类,也实现克隆,这样对于非基本数据类型的属性,复制的不是一份引用,即新产生的对象和原始对象中的非基本数据类型的属性指向的不是同一个对象

对于简单的对象,我们可以通过枚举克隆类中所有对象的方式进行深度克隆,但对于复杂对象,这样处理就显得非常繁琐笨重了,因此可利用序列化和反序列化的特性,进行深度克隆

public class Test08 {

    public static void main(String[] args) {
        People2 p1 = new People2("caililiang",25);
        try {
            ByteArrayOutputStream bas =new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bas);
            oos.writeObject(p1);
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bas.toByteArray()));
            People2 p2 =(People2) ois.readObject();
            bas.flush();oos.flush();
            bas.close();oos.close();
            ois.close();
            System.out.println(p1);
            System.out.println(p2);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class People2 implements Serializable{//必须实现Serializable接口
    private String name;
    private int age;
    public People2(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 10,908评论 0 24
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,869评论 18 139
  • 废话不多说,自己进入今天的主题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:...
    传奇内服号阅读 2,392评论 1 31
  • LeiLeiString阅读 4,538评论 0 1
  • 在简书上写了几篇文章,当做是自己的学习记录吧,但总感觉缺了点啥,想想可能是太过于偏向自我记录,却没有和互联网上的大...
    xiaozhoua阅读 216评论 0 0