主要的原理:需要克隆的对象必须实现Serializable接口,用序列化和反序列化来实现深度克隆,序列化指的就是把对象直接转化成文件或者其他持久层数据(二进制文件,字节码文件),反序列化指的就是读出该数据,重新建立对象的过程。即就是实现对象的字节流转换,然后在把当前的字节流对象输出,得到新的对象。
package com.nullable.tools.id;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* 深度克隆工具类
* @author null_able
*/
public class DeepCloneTool {
/**
* 深度克隆
* @param obj
* @return
*/
public Object deepClone(Object obj) {
ObjectOutputStream out = null;
ObjectInputStream in = null;
try {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
out = new ObjectOutputStream(buf);
out.writeObject(obj);
in = new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));
return in.readObject();
} catch (IOException e) {
} catch (ClassNotFoundException e) {
} finally {
try {
if (out != null)
out.close();
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
return in;
}
}