克隆工具类,进行深克隆,包括对象、集合
package com.JUtils.clone; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Collection; /** * 克隆工具类,进行深克隆,包括对象、集合 * */ public class CloneUtils { /** * 采用对象的序列化完成对象的深克隆 * @param obj * 待克隆的对象 * @return */ @SuppressWarnings("unchecked") public static <T extends Serializable> T cloneObject(T obj) { T cloneObj = null; try { // 写入字节流 ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(out); obs.writeObject(obj); obs.close(); // 分配内存,写入原始对象,生成新对象 ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray()); ObjectInputStream ois = new ObjectInputStream(ios); // 返回生成的新对象 cloneObj = (T) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return cloneObj; } /** * 利用序列化完成集合的深克隆 * * @param collection * 待克隆的集合 * @return * @throws ClassNotFoundException * @throws java.io.IOException */ @SuppressWarnings("unchecked") public static <T> Collection<T> cloneCollection(Collection<T> collection) throws ClassNotFoundException, IOException{ ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(collection); out.close(); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); Collection<T> dest = (Collection<T>) in.readObject(); in.close(); return dest; } }
作 者:一支会记忆的笔
---------------------
个性 签名:真正的学习不是记住知识,而是学会如何提出问题,研究问题,解决问题。
如果觉得这篇文章对你有小小的帮助的话,记得在下方“关注”哦,博主在此感谢!