java的clone方法实现的是浅拷贝,如果被拷贝的object里面有子object,子object有孙object。。。的话,这些object的内容就消失了。
除非你对每个子/孙的object的clone方法都重载。当然这东西太2b,人类都不这么玩的。
最简单的实现方式是使用ByteArrayOutputStream和ByteArrayInputStream()来将一个object转换成byte流变换。先将它write到输出流,再重输入流read。实现它内容的拷贝。
package com.interview.scoop;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Stack;
public class DeepClone {
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
for(int i = 0; i < 3; i++) {
s.push(i);
}
@SuppressWarnings("unchecked")
Stack<Integer> b = (Stack<Integer>) DeepClone.copy(s);
int size = b.size();
for(int i = 0; i < size; i++) {
System.out.println(b.pop());
}
}
public static Object copy(Object oldObj) {
Object o = null;
//Used to carry the output
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
// Used to method output
ObjectOutputStream oos = new ObjectOutputStream(bos);
// Write object to the container
oos.writeObject(oldObj);
// flush is not necessities
oos.flush();
oos.close();
// container, give the object to it, which will be translate to stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
// tool
ObjectInputStream ois = new ObjectInputStream(bis);
try {
// read target and get an object
o = ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
return o;
}
}
}
分享到:
相关推荐
java提供各种IO操作。深入浅出的讲解IO.适合初学者学习
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
泛型 Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符? 常用的通配符有哪些? 你的项目中哪里用到了泛型? 反射 何为反射?...Java 中 IO 流分为几种? 既然有了字节流,为什么还要有字符流?
java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...
该文档主要提供,针对于java的io操作的一些具体事项
java常见面试题(史上最全最经典-希望对你有用).基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。
Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 Spring面试题 Spring Boot面试题 Spring Cloud面试题...
JAVA教程 io流操作 JAVA教程 io流操作 JAVA教程 io流操作
Java面试资料之IO相关
Java iO操作全集 希望对你学习有所帮助。
java_IO操作_(读写、追加、删除、移动、复制等)
提高Java IO操作的性能 虽然抱怨Java程序性能不佳的呼声由来已久,但实际上,如果开发者在整个开发周期内都能够关注性能问题,Java程序完全可以和C/C++程序一样快。本文分析了Java IO应用中一些常见的性能问题。
java IO操作详细解释 清华大学java io专用教材
java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...
资源描述: 1.2022面试题7javaio&kafka-doc文件 2.资源内容:2022面试题7javaio&kafka背诵版本 3.学习目标:了解2022面试当中的各种套路,避坑上岸 4.特点:简单易懂,容易上手 5.使用说明:需要使用wps打开
本资源主要包括Java基础知识、Java集合、多线程、IO操作、网络编程、数据库等方面的面试题目,以及一些实际应用场景下的编程题目。本资源所包含的面试题目丰富多彩,有些题目侧重于Java基础知识的考察,而有些题目则...
java基础之IO流,基础简介知识,帮助你了解java的io技术
java常见面试题(史上最全最经典-希望对你有用).基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。历年常见面试题型,涵盖...
IO流 javaio java 流
JAVA课件Java IO.ppt详细了解JAVA