美文网首页
使用对象序列化和反序列化实现深度克隆

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

作者: 笑才 | 来源:发表于2018-11-26 23:38 被阅读0次

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

相关文章

  • Apache Commons Lang3之Serializati

    概述 SerializationUtils是Java序列化工具类,主要有以下几个功能:使用序列化进行深度克隆序列化...

  • Java深度拷贝方式和性能对比

    前言 Java的深度拷贝大致分为克隆(实现Java的Clone接口)和序列化(实现Java的Serializabl...

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

    java对象进行克隆,分为浅克隆和深克隆 浅克隆需要实现java.lang.Cloneable接口,并重写java...

  • C#深度拷贝,浅拷贝

    使用序列化的方法实现深度拷贝非常方便

  • Java序列化

    含义、意义使用场景 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的...

  • 序列化和反序列化对象

    被序列化的对象需要实现Serializable接口例子: 序列化和反序列化操作 结果:

  • Java 序列化Serializable 及 transient

    java 中的 Serializable 接口是用于实现对象 序列化和反序列化 的功能。那么什么是序列化和反序列化...

  • 序列化和反序列化的概念

    1序列化:把对象转为字节序列的过程 为序列化; 2相反:字节---------->对象 为反序列化 3 序列化的场...

  • 大话java面试-java基础-4

    1、序列化和反序列化的底层实现 序列化是指把对象转化成字节流,反序列化是指把字节流转化成对象。 实现了Serial...

  • C#序列化

    序列化操作 序列化对象声明 对类使用序列化时,标注那些不需要序列化的字段。 序列化只能针对字段使用。 使用序列化相...

网友评论

      本文标题:使用对象序列化和反序列化实现深度克隆

      本文链接:https://www.haomeiwen.com/subject/acfwqqtx.html