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; /** * Clone tool class for deep cloning, including objects and collections * */ public class CloneUtils { /** * Use the serialization of the object to complete the deep clone of the object * @param obj * The object to be cloned * @return */ @SuppressWarnings("unchecked") public static <T extends Serializable> T cloneObject(T obj) { T cloneObj = null; try { // write byte stream ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(out); obs.writeObject(obj); obs.close(); // allocate memory, write original object, generate new object ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray()); ObjectInputStream ois = new ObjectInputStream(ios); // return the new object generated cloneObj = (T) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return cloneObj; } /** * Use serialization to complete the deep clone of the collection * * @param collection * Collection to be cloned * @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; } }
Clone tool class--deep clone objects and collections
Guess you like
Origin blog.csdn.net/weixin_38860565/article/details/109429867
Ranking