关于克隆

java对象的克隆分为深克隆(把要克隆的对象及所有引用对象都克隆了)和浅克隆。

实现深克隆的方法:1、所有引用对象都实现cloneable接口,重写Object 类的clone方法。

2、利用串行化来做深复制,即把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序师圈子里又非常形象地称为“冷冻”或者“腌咸菜(picking)”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做 “解冻”或者“回鲜(depicking)”过程。

应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝,Java咸菜还可以回鲜。
在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读出来(把咸菜回鲜),便可以重建对象。
如下为深复制源代码。
public Object deepClone()    
{    
//将对象写到流里    
ByteArrayOutoutStream bo=new ByteArrayOutputStream();    
ObjectOutputStream oo=new ObjectOutputStream(bo);    
oo.writeObject(this);    
//从流里读出来    
ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());    
ObjectInputStream oi=new ObjectInputStream(bi);    
return(oi.readObject());    
}   

这样做的前提是对象以及对象内部所有引用到的对象都是可串行化的,否则,就需要仔细考察那些不可串行化的对象可否设成transient,从而将之排除在复制过程之外。

时间: 2024-08-06 20:01:36

关于克隆的相关文章

VmWare Workstation 关于Linux 虚拟机快照或克隆后 识别不到网卡问题

当我们在用VmWare Workstation 做Linux测试时,做的快照或克隆,重新启动虚拟机后,会识别不到网卡,我们只需做如下操作,让Linux自动识别到网卡. [[email protected] rules.d]# pwd/etc/udev/rules.d[[email protected] rules.d]# lltotal 36-rw-r--r--. 1 root root 1652 Nov 12  2010 60-fprint-autosuspend.rules-rw-r--r-

Horizon7发布完整克隆模式后,无法登录问题

问题描述:通过完整克隆模式发布后,发现,登录的时候无法使用域账户登录系统. 解决方法:后来发现自定义配置文件,没有设置自动加域,更改后重新发布即可.

克隆CentOS6.6系统,网卡显示不存在

今天做实验需要用到两个Linux系统,于是就把原有的CentOS6.6_64系统克隆了一份,启动克隆的系统配置好IP地址后,重启网络服务(service network restart),提示eth0不存在.而明明eth0文件是有存在滴. 下面来说说解决的方法: 1.修改克隆的CentOS6.6_64系统的网卡配置文件ifcfg-eth0,把HWADDR和UUID的行删除,参考如下:     [[email protected] Packages]# vim /etc/sysconfig/net

KVM虚拟化笔记(六)------kvm虚拟机的克隆

kvm虚拟机的克隆分为两种情况:kvm主机本机虚拟机直接克隆和通过复制配置文件与磁盘文件的虚拟机复制克隆.接下来我们一一进行测试: (一)kvm主机虚拟机的直接克隆 1,查看虚拟机的配置文件和磁盘文件: [[email protected] qemu]# cat /etc/libvirt/qemu/hadoop1.xml  <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE  OVERWRITT

vmware虚拟机克隆后eth0无法启动的解决方法

今天早上准备克隆一台虚拟机做实验,结果克隆后发现使用 ifconfig 只显示lo,并没有找到eth0 使用ifconfig eth0 up 结果:unknown interface:No such device 查看 /etc/sysconfig/network-scripts/ifcfg-eth0 发现并没有什么不正常的地方. 被克隆的机器上执行ifconfig命令,发现两台机的MAC地址是相同的. 于是决定修改eth0的MAC地址,直接编辑/etc/sysconfig/network-sc

克隆虚拟机

克隆虚拟机 2015-12-2616:02:10 准备阶段 首先选择一个已经存在的虚拟机.这里选择一个叫做backup的虚拟机Centos 6 查出备份机的IP等相关信息 [[email protected] ~]# vim/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:6A:8B:CE TYPE=Ethernet UUID=f16d79ea-7dd5-4cea-8a3f-d688fbcf6a6e ONB

U大师U盘启动盘克隆制作工具

发布时间:2013-04-18 软件大小:0.9 MB 应用平台:Win8/Win7/Vista/Win2003/WinXP/Win2000/Win9X/ 软件语言:简体中文 嫌制作启动U盘麻烦.费事.这下不用发愁了,U大师推出一款新软件,只要你拥有一个已经是启动U盘的U盘即可通过此软件,将该启动U盘克隆到新的U盘,那么新的U盘也成了启动U盘了.下面就由小编叫大家如何具体操作该工具. 一.功能介绍该工具的主要功能就是方便用户,使得用户能够在不需要下载U盘启动盘制作工具的情况下,直接将U盘启动盘源

工作积累(四)——JavaScript深度克隆的实现

JavaScript 中的数据有两种大类,即基本类型和引用类型.因为引用类型使用指针,所以在简单赋值时不能实现克隆,下面介绍两种方法来实现 JavaScript 深度克隆. 1. 原生JavaScript: function clone(former) { if(!(former instanceof Object) ||former === null || (former instanceof RegExp) || (former instanceof Function)) return fo

16-SCVMM2012之克隆虚拟机

4.12.创建VM模板4.12.1.克隆虚拟机 导航到VM和服务à创建,选定需要克隆的虚拟机 在下拉选项中,选择"克隆" 输入虚拟机名称以及描述 硬件配置文件默认即可,点击"下一步" 选择主机组,点击"下一步" 选定Hyper-V主机,点击"下一步" 选择VM配置的存储位置,点击"下一步" 选择虚拟机交换机等网络属性,点击"下一步" 这里默认即可,点击"下一步" 点击

OpenWrt PPPoE拨号问题之mac地址克隆

[转载请注明出处:钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/38322705] 在实施任何大型项目中,我们会遇到各种各样的问题,当然了,如果做足了充分的测试,我们会便利很多. 前言 Mac地址克隆主要是解决运营商绑定mac地址的行为,这种行为就给哥添麻烦. 好了,话题转回,我如何实现这个Mac地址克隆的. OpenWrt中的LAN口以实现Mac地址克隆,所以其相关的设置Mac地址克隆的东西也已经存在了,我们需要做的就是搬到PP