无论什么都可以放到IO流中360°来一圈,这样就不存在地址引用,但是要求数据实体实现了序列化;
比如clone一个map操作:
public class TestClone{
public Object deepClone(Object obj){
try{
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return oi.readObject();
}catch(Exception e){
return null;
}
}
@Test
public void test(){
Map<String,Person> map1 = new HashMap();
Person person1 = Person.builder().name("xiaosong").build();
Person person2 = Person.builder().name("xiaoting").build();
map1.put("name1", person1);
map1.put("name2", person2);
Map<String,Person> map2 = (Map<String,Person>) deepClone(map1);
person1.setName("xiaozhu");
map1.remove("name2");
Assert.isTrue(map2.size==2);
Assert.isTrue(map2.get("name1").getName().equals("xiaosong"));
}
}
@Data
@Builder
class Person implements Serializable{
private static final long serialVersionUID = 896484393058037777L;
private String name;
}