首先查看克隆相关类的定义,并将宠物类定义为人类类数据域的成员,以检测是否成功地检测到克隆对象的宠物数据域的价值。有些人在宠物类和人类类中设置并获得方法,并重写tostring方法。此外,两个类别都实现了可序列化的界面。这也是标签接口。如果要序列化对象,则必须实现它。
最后一个保存了克隆方法。在本节中,可以看出,首先使用流将对象写入流中,序列化,然后从流中读取它以实现它。这样,克隆成功地成功地进行了序列化和更深层次的处理- 订单思想。因为它不涉及对象传输和持久性的问题,所以它只是一个克隆,因此这里没有序列化的磁盘。
修改克隆对象的每个数据域。测试结果如下:
克隆对象的修改不会影响原始对象,并且该方法还完成了深克隆。
“ Java Core Technology第2卷”提到,这种克隆的序列化方法比一一复制数据域的方法要慢得多,然后对其进行测试。
测试的主要功能如上所述,并执行10,000个对象的克隆。
然后注释序列化克隆的克隆方法代码,然后将克隆方法替换为以下传统方法代码:
运行相同的测试程序,结果如下:
可以看出,效率是差异的100倍。猜想可能是输入输出流的序列化比直接克隆更耗时。
为了验证我的猜想并满足自己的好奇心,我将串行的克隆方法重写如下:
现在,它没有写入并在内存中的流中读取。现在,将对象序列序列化为磁盘中的文件,然后它们返回同一时间检测代码。结果如下:
可以发现效率非常接触。它也是序列化和降解的。该方法比流动流慢两百倍。可以看出,在磁盘的读写上缓慢,缓慢地看。
Java的对象序列化和深化序列化为我们提供了另一种深克隆的方法。该方法的优点是代码很简单。不必参考数据域的对象以单独重写克隆方法,您可以复制它。缺点是效率更加感人。