1 目标对象的类要实现 Serializable 接口
其成员若是引用类型 也必须实现Serializable 接口
若某个成员不需要序列化 transient
2 这个类可以实现复杂对象图的深度复制
1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.ObjectInputStream; 4 import java.io.ObjectOutputStream; 5 import java.io.Serializable; 6 7 public class DeepCopy { 8 9 /** 10 * 深度复制,复制的整个对象图 11 * 12 * 要求:目标要实现了序列化的接口 13 transient修饰的属性由于不能被序列化 所以不会被克隆 14 */ 15 public static Serializable deeplyCopy(Serializable src){ 16 17 try { 18 19 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 20 ObjectOutputStream oos = new ObjectOutputStream(baos); 21 22 oos.writeObject(src); 23 oos.close(); 24 baos.close(); 25 26 byte[] bytes = baos.toByteArray(); 27 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 28 ObjectInputStream ois = new ObjectInputStream(bais); 29 Serializable copy = (Serializable) ois.readObject(); 30 ois.close(); 31 bais.close(); 32 33 return copy ; 34 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 39 return null ; 40 } 41 42 }
时间: 2024-11-05 14:33:03