IO流实现对象的深复制

项目中碰到的,有个操作需要把对象复制一遍然后分别进行不同的操作,结果发现得到的结果是两次操作都进行了之后的

最初的代码是这么写的

这样做肯定不对啦,打印出两个对象的地址

意料之中,是一样的

然后使用了java.lang.Cloneable接口,并且重写了它的clone()方法,感觉我的重写好像有点问题,不过也就这样啦

又复制了一遍好像有点用,两个对象的地址不一样了但是为什么我最后获取到的内容还是一样啊,发现原来我的这个对象里面有list,也打印出地址看看

原来它的list还是使用的浅复制,最后解决是这样的,类实现序列化接口

使用IO流深度复制

public static SgDictionaryData deepCopy(SgDictionaryData sg) {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
try {
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(sg);
 
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream inStream = new ObjectInputStream(byteIn);
SgDictionaryData dest = (SgDictionaryData) inStream.readObject();
return dest;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;

}

页面效果和内容就不贴出来啦,地址是这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值