Java的深拷贝的两种实现
1.java.lang.Object的clone()方法默认是返回一个前拷贝对象。如果要用clone()方法实现一个深拷贝,必须对每个对象的clone()方法进行特别实现。当对象层次复杂的时候,这样做不但困难而且浪费时间和容易出现错误。
2.序列化:把要拷贝的对象输出成byte array,然后再利用ObjectInputStream转换出新的对象。
public static Object copy(Object oldObj) { Object obj = null; try { // Write the object out to a byte array ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(oldObj); out.flush(); out.close(); // Retrieve an input stream from the byte array and read // a copy of the object back in. ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bis); obj = in.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } return obj; }