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

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;
    }
}

你可能感兴趣的:(使用对象序列化和反序列化实现深度克隆)