`

深层复制与浅层复制(通过序列化的方式实现)

    博客分类:
  • java
阅读更多
package com.softstome.clone.arrayCopy.internet;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import com.softstome.clone.Phone;
import com.softstome.clone.Student;

public class ListCopyDemo {

/*
* 使用序列化方法方法  ,实现集合的深层复制(推荐)
*
* 这也可以用来对象的克隆
* */
public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException { 
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 
    ObjectOutputStream out = new ObjectOutputStream(byteOut); 
    out.writeObject(src); 
 
    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); 
    ObjectInputStream in = new ObjectInputStream(byteIn); 
    @SuppressWarnings("unchecked") 
    List<T> dest = (List<T>) in.readObject(); 
    return dest; 


public static Object deepCopyObj(Object src) throws IOException, ClassNotFoundException { 
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 
    ObjectOutputStream out = new ObjectOutputStream(byteOut); 
    out.writeObject(src); 
 
    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); 
    ObjectInputStream in = new ObjectInputStream(byteIn); 
    @SuppressWarnings("unchecked") 
   Object dest =  in.readObject(); 
    return dest; 



public static void main(String[] args) throws ClassNotFoundException, IOException {



// 集合的深层复制
 
/*  List<Person> srcList=new ArrayList<Person>();
srcList.add(new Person(10,"张三"));
srcList.add(new Person(11,"李四"));
List<Person> descList=null;
descList=ListCopyDemo.deepCopy(srcList);
srcList.get(0).setName("张三1");
System.out.println(srcList);
System.out.println(descList);*/


/*
* 对象的深层复制
* */
/* Person src=new Person(12,"小杏");
Person desc=ListCopyDemo.deepCopyObj(src);
src.setAge(14);
System.out.println(src);
System.out.println(desc);*/



/*
* 对于有成员对象的对象的复制
* */
Student stu= new Student(2010032123, "周沈洁", new Phone("白色", "中兴"));

Student stu1=(Student)ListCopyDemo.deepCopyObj(stu);

stu.setStname("董洁");
stu.getPhone().setColor("黑色");
System.out.println(stu+"    "+stu.getPhone());
System.out.println(stu1+"    "+stu1.getPhone());


}
}


//说明 :Student类与Phone类在  :深层复制与浅层复制(通过clone的方式)中有,这里就不重复了
分享到:
评论

相关推荐

    Java二进制序列化与克隆快速、高效、自动化.zip

    Kryo 还可以自动执行深层和浅层复制/克隆。这是从对象到对象的直接复制,而不是从对象到字节再到对象的复制。本文档适用于 Kryo 版本 5.x。请参阅4.x 版本的Wiki 。联系方式/邮件列表请使用Kryo 邮件列表来提问、...

    java_经典多线程编程

    - **实现方式**:可以通过实现`Cloneable`接口并重写`clone()`方法来实现浅层复制,而对于深层复制,可以通过序列化和反序列化来实现。 - **案例**:通过编写代码演示如何实现这两种复制方式,并比较它们的区别。 ...

    java_javasecore1_day05

    浅层复制与深层复制 #### 描述 - **浅层复制**仅复制对象的引用,因此复制的对象和原对象共享相同的成员变量。 - **深层复制**则会递归地复制对象及其所有成员变量的副本,创建完全独立的新对象。 - 通过了解这...

    JavaScript复制变量三种方法实例详解

    - 对于大型或复杂的对象,性能开销较大,因为需要序列化和反序列化整个对象。 - JSON不支持函数、undefined、循环引用等类型,这些在转换过程中会被丢失或忽略。 3. **浅层复制:Object.assign()** `Object....

    kryo:Java二进制序列化和克隆:快速,高效,自动

    Kryo还可以执行自动的深层和浅层复制/克隆。 这是从对象到对象的直接复制,而不是从对象到字节的复制。 联系人/邮件列表 请使用获取问题,讨论和支持。 请将Kryo问题追踪器的使用限制为错误和增强功能,而不是问题...

    4机器人的学习研究进展深度学习及应用.pptx

    深度学习是人工智能的一个重要分支,它的核心在于构建深层的神经网络模型,模仿人脑的复杂结构和功能,以实现从原始数据中自动学习和提取高级抽象特征。这种技术使得计算机能够处理非结构化数据,如图像、声音和文本...

Global site tag (gtag.js) - Google Analytics