JAVA-序列化深拷贝对象

时间:2022-08-21 05:00:07

序列化拷贝方法

@SuppressWarnings("unchecked")
public static <T extends Serializable> T clone(T obj) {
T cloneObj = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(obj); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ois = new ObjectInputStream(bais);
cloneObj = (T) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.close();
}
if (ois != null) {
ois.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return cloneObj;
}

测试

public class Address implements Serializable {
private String address;
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
private Address address;
public static void main(String[] args) {
Address address = new Address("wuhan");
User user = new User(1, "asds", 18, address); User clone = clone(user); System.out.println(System.identityHashCode(user) + "\t" + user);
System.out.println(System.identityHashCode(clone) + "\t" + clone); user.getAddress().setAddress("beijing"); System.out.println(user.hashCode() + "\t" + user);
System.out.println(clone.hashCode() + "\t" + clone);
}

JAVA-序列化深拷贝对象

需要被拷贝对象实现 Serializable 序列化接口,内部所有的属性也全部要实现序列化接口