精华内容
下载资源
问答
  • 主要介绍了Java中对象的深复制(深克隆复制(浅克隆) ,需要的朋友可以参考下
  • 浅析C#的复制和克隆

    2021-01-20 06:34:01
    本文浅析了C#的复制和克隆技术,对于有需要的朋友可以参考下。 在C#中,用HashTable,DataTable等实现复制和克隆,下面直接看例子: HashTable ht = null; ht = new HashTable(); foreach(string s in ht) { //... }...
  • 使用DOM复制克隆)指定节点名数据到新的XML文件中 ,用到三个类的相关知识点 : DOMDocument - DOMNodeList - DOMNode
  • 加密狗克隆机 加密狗型号快速检测 加密狗型号检测工具 加密狗检测 圣天诺SuperPro配套工具 圣天诺加密狗dump工具 域天软件工具 彩虹UDA加密狗硬复制视频语音教程 彩虹UDA软件狗 新增加密狗资料 深思4...
  • 当年也是纠结于深复制和复制,这里很详细的见解了下
  • 注意:这个工具只能复制页面,后台克隆不了的,只需输入网站地址,每个页面,文件夹,js文件等一键打包下载,文件里含有详细的使用教程,非常实用的一款
  • 主要介绍了Java编程实现对象克隆复制)代码详解,涉及了克隆的原因,如何实现克隆克隆的一般步骤,深克隆与浅克隆的介绍等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
  • 虚拟机的复制、快照和克隆

    千次阅读 2020-02-28 13:57:41
    虚拟机的复制:直接在要复制的虚拟机存储文件夹下复制一个副本,更改副本名称,并使用VMware等相关软件打开,先不要开启,重命名好虚拟机,然后启动虚拟机,更改配置 虚拟机的快照: 虚拟机的克隆: ...
    • 虚拟机的复制:直接在要复制的虚拟机存储文件夹下复制一个副本,更改副本名称,并使用VMware等相关软件打开,先不要开启,重命名好虚拟机,然后启动虚拟机,更改配置

    复制虚拟机

    复制虚拟机

    使用已装备好的一台虚拟机,这里用的是master001号虚拟机
    进入master001的存储文件夹,复制四个副本(本人练习需要,大家可以只复制一个副本),作为新的虚拟机,修改四个新虚拟机的名称并用VMware打开
    在这里插入图片描述
    通过选择“我已复制该虚拟机”来告诉VMware平台“我这台虚拟机需要生成一个新的MAC地址”,如果选择其他,则无法生成新的MAC地址
    在这里插入图片描述

    修改虚拟配置

    查看MAC地址

    cat /etc/udev/rules.d/70-persistent-net.rules
    

    最后一条为最新的MAC地址,并记住ATTR和NAME的值
    为防止混乱,注释添加每个虚拟机的MAC地址对应虚拟机名称

    修改MAC地址和IP地址

    需要到profile文件中修改最新的MAC地址和网络名称

    vi /etc/sysconfig/network-scripts/ifcfg-eth0		//未修改前的“eth0”未更改
    

    在这里插入图片描述

    修改主机名

    vi /etc/sysconfig/network
    //改写:
    HOSTNAME=master002
    //重启使修改生效
    reboot
    

    验证修改成功

    使用ifconfig命令
    master002
    修改成功

    • 虚拟机的快照:快照是数据存储的某一时刻的状态记录,需要进行克隆

    拍摄快照

    打开VMware,在菜单项选择自己需要复制的虚拟机,不要开机,右键点击或者在菜单栏点击虚拟机选择快照,再点击拍摄快照
    在这里插入图片描述
    编辑快照名称并保存,这就是一个快照文件了。快照还需要用克隆来组建一个完整的虚拟机,虚拟机的克隆可以看接下来的操作。
    在这里插入图片描述

    • 虚拟机的克隆:使用快照制作一台虚拟机,有两种选择:一种是依赖于拍摄快照的源虚拟机;一种是完全独立的“副本”

    克隆虚拟机

    步骤如下图:
    在这里插入图片描述
    在这里插入图片描述
    点击完成后就有一个系的虚拟机的,按照分类来开启虚拟机
    同一个虚拟机不能有一样的IP地址,所以需要更改虚拟机配置

    修改虚拟配置

    查看MAC地址

    cat /etc/udev/rules.d/70-persistent-net.rules
    

    最后一条为最新的MAC地址,并记住ATTR和NAME的值
    为防止混乱,注释添加每个虚拟机的MAC地址对应虚拟机名称

    修改MAC地址和IP地址

    需要到profile文件中修改最新的MAC地址和网络名称

    vi /etc/sysconfig/network-scripts/ifcfg-eth0		//未修改前的“eth0”未更改
    

    在这里插入图片描述

    修改主机名

    vi /etc/sysconfig/network
    //改写:
    HOSTNAME=master002
    //重启使修改生效
    reboot
    

    验证修改成功

    使用ifconfig命令
    master002
    修改成功

    展开全文
  • 6,虚拟机的复制克隆总结

    千次阅读 2019-06-02 14:23:52
    我们知道,手动安装 linux 系统需要耗费很多时间,所以,平时,我们在学习中,一半采用复制和克隆的方式来创建虚拟机。原因是,复制克隆都可以快速的让我们拥有一台虚拟机,而不需要花费太多时间。 2 ,.vmx 文件 ...

    1 ,速度问题 :

    我们知道,手动安装 linux 系统需要耗费很多时间,所以,平时,我们在学习中,一半采用复制和克隆的方式来创建虚拟机。原因是,复制与克隆都可以快速的让我们拥有一台虚拟机,而不需要花费太多时间。

    2 ,.vmx 文件 :

    我们在复制虚拟机的时候,打开文件夹后,会看到很多文件,我们需要打开 .vmx 文件。
    打开这个文件后,虚拟机就会出现在 vmware 中,不能点击别的文件,只有这个文件才是可执行文件。
    在这里插入图片描述

    3 ,mac 地址是什么东西 :

    1. 同学们应该注意到了,我们每次新建一个虚拟机,都要重新生成 mac 地址,那么这个 mac 地址是做什么用的呢?
      MAC地址(Media Access Control Address):媒体访问控制地址,是网卡的唯一标识。
    2. 孙 : 每一台电脑都有唯一的 mac 地址,出厂的时候,就自带了 mac 地址,每台电脑都不一样,就像我们每个人都有一个身份证号码一样。
    3. 为什么我们需要重新生成 max 地址呢?
      无论是复制还是克隆,都是讲虚拟机的相关文件,原封不动的拿过来用,那么,mac 地址就会重复,所以,我们需要重新生成一个不重复的,唯一的 mac 地址。
      在这里插入图片描述

    4 ,为什么要修改 vim /etc/udev/rules.d/70-persistent-net.rules 文件

    1. 这个文件,是管理网卡和 mac 地址的对应关系的。
    2. 这个文件中本来就有一个 mac 地址。
    3. 我们又重新生成了一个 mav 地址。
    4. 所以这个里面就出现了 2 个 mac 地址。
    5. 每个 mac 地址对应一块网卡,所以他就生成了两块网卡。
    6. 我们不需要两块网卡,有一块就够了
    7. 我们把之前的一行配置信息删除掉,也就相当于,把第一个 mac 地址和第一块网卡删除掉。
    8. 把最下面的配置信息,修改为 eth0 ,就相当于,把这个 mac 地址给了 eth0 。
    9. 网卡命名规则 :我们同学学过了 java ,应该知道,在程序的设计中,数字是从 0 开始的。
      所以,第一块网卡的名字是 eth0
      第二块网卡的名字是 eth1
      第三块网卡的名字是 eth2 …

    5 ,为什么要修改 vim /etc/sysconfig/network-scripts/ifcfg-eth0

    这个文件是直接配置网络信息的文件。

    展开全文
  • 首先我们需要知道,什么是对象的克隆,或者说复制。一个业务逻辑,需要一个新的对象,但是类型值都是之前的,也就是说,新状态之前完全一样。使用new赋值语句或者set注入都是可以的,但是,这会花费大量开销去...

    一、什么是对象克隆?

    首先我们需要知道,什么是对象的克隆,或者说复制。一个业务逻辑,需要一个新的对象,但是类型和值都是之前的,也就是说,新状态和之前完全一样。使用new和赋值语句或者set注入都是可以的,但是,这会花费大量开销去做,效率低,并且还会产生冗余代码。
    恰好java语言本身契合了原型设计模式,给我们提供了一个clone方法在Object对象中,只要需要克隆的对象实现Cloneable接口,那么我们只要简单的调用一下该方法就可以获得表面完全不同的对象。
    例1:

    public class User implements Cloneable{
        @Override
        protected Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return super.clone();
        }
    }
    ......
    User u = new User();
    User uCopy = u.clone();
    //显然u和uCopy已经是两个不同的对象了
    System.out.println(u == uCopy);//false
    

    二、如何实现对象克隆

    上文也是提到,克隆对象基本只要两步:

    1. 实现Cloneable接口
    2. 实现clone()方法,并调用父类clone()

    需要注意,Objectclone()方法是在java平台层实现的native方法,具有开销小,速度快的特点。而且,原始的Object方法是被protected修饰的,在这里需要修改为public,如果不这么做,浅克隆时没有问题,深克隆就会遇到权限不够的问题。java继承还有个原则,就是子类覆写父类方法,访问修饰符权限不能低于父类。

    三、什么是浅克隆和深克隆

    例2:

    /**
     * 浅克隆/浅拷贝
     * @datetime  2018-10-09 09:43:22
     * @author Belmode
     *
     */
    public class ShallowClone {
        public static void main(String[] args) throws Exception {
            Person p = new Person("李达康", "55", "汉东省京州市");
            Person p2 = (Person) p.clone();
            //一级对象
            System.out.println(p == p2);//false
            //二级对象
            System.out.println(p.personalInfo == p2.personalInfo);//true
            //三级对象
            System.out.println(p.personalInfo.name == p2.personalInfo.name);//true
        }
    }
    class PersonalInfo implements Cloneable{
        String name;
        String age;
        String address;
        public PersonalInfo(String name, String age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    class Person implements Cloneable{
        PersonalInfo personalInfo;
        
        public Person(String name, String age, String address) {
            this.personalInfo = new PersonalInfo(name, age, address);
        }
        
        @Override
        public Object clone() throws CloneNotSupportedException {
             return super.clone();
        }
    }
    

    在本例中,Person类拥有PersonalInfo类作为属性,两者都实现了Cloneable接口,并且重写了clone()方法。
    ShallowClone类的main方法中,构建了一个Person对象p,调用clone()方法,产生p2pp2不是一个对象,但是pp2内部的personalInfo属性是同一对象,这就会导致一个致命的问题,当我修改p.personalInfo内部的属性值,结果p2.personalInfo也被修改了。
    p.personalInfo.name = "孙正义";
    System.out.println(p2.personalInfo.name); //孙正义

    • 这是什么原因导致的?
      这是因为java中不仅仅有基本变量,还有引用变量
      浅拷贝:仅仅克隆基本类型变量,而不克隆引用类型的变量
      深克隆:既克隆基本类型变量,也克隆引用类型变量

    • 其实本来原生的clone()方法也是,复制了引用的,但是为什么引用类型还是同一个呢?
      就是因为java中,只有值传递,没有引用传递,引用在内存中还是值,是地址的hash值,一个特殊标记唯一堆内存块的值。
      图1:

      8263107-7342db46085c3c99.png

       

    在JVM虚拟机中,事实上就是一个java.exe或者javaw.exe进程里, 会存在栈内存和堆内存,堆内存又可细分,这里就不多说了,想深入了解的可以问度娘。在方法区中存储着PersonPersonalInfo的类模板,通过new 派生出 ppesonalInfo的实例,如图中箭头所示。此时p里引用着personalInfo实例(其实应该从p实例里的方框画箭头到栈位置的personalInfo标签,这里为了下面说明,就没那么做了)
    在栈内存中存储的都是hashcode,类似于eb5238b,存在p的位置,就产生了图中的箭头

    图2:调用clone()方法,克隆出p2

    8263107-97d6d6f9b29e473c.png


    如图所示,p2是真的新实例,但是personalInfo也是复制的值,p2里的personalInfo属性保存personalInfo实例的地址值,所以,如黄线所示,还是引用到原本的personalInfo实例。
    因此,修改p.personalInfo里的属性,p2.personalInfo里的值也会收到影响!!

     

    那么,如果我修改p.personalInfo属性,p.personalInfo = new PersonalInfo.....p2.pernalInfo会不会收到影响呢?
    答案是不会的。
    图3:

    8263107-5b800d2b7ae791af.png

     

    如图所示,会断开红叉处的连接,生成橙色连接。如橙线所示。
    p对象和p2personalInfo属性其实已经不同了。

    话题有点跑偏了,因为会出现上面的原因,所以需要深克隆。

    例3:

    public class DeepClone {
        public static void main(String[] args) throws Exception {
            Person2 person = new Person2("李达康", "55", "汉东省京州市");
            Person2 person2 = (Person2) person.clone();
            //一级对象
            System.out.println(person == person2);//false
            //二级对象
            System.out.println(person.personalInfo == person2.personalInfo);//false
            //三级对象
            System.out.println(person.personalInfo.name == person2.personalInfo.name);//false
        }
    }
    
    class PersonalInfo2 implements Cloneable{
        String name;
        String age;
        String address;
        public PersonalInfo2(String name, String age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }
        
        @Override
        public Object clone() throws CloneNotSupportedException {
            PersonalInfo2 pInfo = (PersonalInfo2) super.clone();
            pInfo.name = new String(this.name);
            pInfo.age = new String(this.age);
            pInfo.address = new String(this.address);
            return pInfo;
        }
    }
    class Person2 implements Cloneable{
        PersonalInfo2 personalInfo;
        
        public Person2(String name, String age, String address) {
            this.personalInfo = new PersonalInfo2(name, age, address);
        }
        
        @Override
        public Object clone() throws CloneNotSupportedException {
           Person2 p = (Person2) super.clone();
           p.personalInfo = (PersonalInfo2) this.personalInfo.clone();
           return p;
        }
    }
    

    在这里,Person2调用父类clone(),克隆出新实例p,也给p.personalInfo调用 PersonalInfo2的父类方法,而在此中

        @Override
        public Object clone() throws CloneNotSupportedException {
            PersonalInfo2 pInfo = (PersonalInfo2) super.clone();
            pInfo.name = new String(this.name);
            pInfo.age = new String(this.age);
            pInfo.address = new String(this.address);
            return pInfo;
        }
    

    对所有引用类型String全部new产生和之前不同的对象,达到深度克隆的目的。
    (因为String没有实现Cloneable接口,需要通过new派生,这里是举特殊例子。如果是实现Cloneable接口的类,直接嵌套调用clone()方法就好了。)
    这样,新的Person2实例,与之前的引用完全不同,但是值是一样的!深度克隆成功。

            Person2 person = new Person2("李达康", "55", "汉东省京州市");
            Person2 person2 = (Person2) person.clone();
            //一级对象
            System.out.println(person == person2);//false
            //二级对象
            System.out.println(person.personalInfo == person2.personalInfo);//false
            //三级对象
            System.out.println(person.personalInfo.name == person2.personalInfo.name);//false
    
            System.out.println(person.personalInfo.name);//李达康
            System.out.println(person2.personalInfo.name);//李达康
    
    

    三、还有其他深度克隆方式吗?

    对象序列化与反序列化。但是这么做开销更大,不建议如此。(这里不做举例)

    总结:

    1.浅克隆:只复制基本类型的数据,引用类型的数据只复制了引用的地址,引用的对象并没有复制,在新的对象中修改引用类型的数据会影响原对象中的引用。直接使用clone方法,再嵌套的还是浅克隆,因为有些引用类型不能直接克隆。
    2.深克隆:是在引用类型的类中也实现了clone,是clone的嵌套,并且在clone方法中又对没有clone方法的引用类型又做差异化复制,克隆后的对象与原对象之间完全不会影响,但是内容完全相同。
    3.使用序列化也能完成深复制的功能:对象序列化后写入流中,此时也就不存在引用什么的概念了,再从流中读取,生成新的对象,新对象和原对象之间也是完全互不影响的。

    展开全文
  • 复制克隆你的linux系统

    热门讨论 2012-02-03 10:35:03
    本文讲述如何复制已经安装好的linux系统从一台机器到另外一台机器,即使是不一样的硬件,只要centos可以安装的机器,同样可以完成复制
  • 虚拟机链接克隆完整克隆区别

    千次阅读 2020-10-09 15:32:40
    虚拟机克隆分为“完整克隆”(Full Clone)“链接克隆”(Linked Clone)两种方式。 克隆过程中,VMware会生成原始虚拟机不同的MAC地址UUID,这就允许克隆的虚拟机原始虚拟机在同一网络中出现,并且不会产生...

    虚拟机克隆分为“完整克隆”(Full Clone)和“链接克隆”(Linked Clone)两种方式。

    克隆过程中,VMware会生成和原始虚拟机不同的MAC地址和UUID,这就允许克隆的虚拟机和原始虚拟机在同一网络中出现,并且不会产生任何冲突。

    VMware 完整克隆(Full Clone)

    完全克隆的虚拟机不依赖源虚拟机,是完全独立的虚拟机,它的性能与被克隆虚拟机相同。

    由于完整克隆不与父虚拟机共享虚拟磁盘,所以创建完整克隆所需的时间比链接克隆更长。如果涉及的文件较大,完整克隆可能需要数分钟才能创建完成。完整克隆只复制克隆操作时的虚拟机状态,因此无法访问父虚拟机的快照。

    VMware 链接克隆(Linked Clone)

    依赖于源虚拟机(称为父虚拟机)。由于链接克隆是通过父虚拟机的快照创建而成,因此节省了磁盘空间,而且克隆速度非常快,但是克隆后的虚拟机性能能会有所下降。

    对父虚拟机的虚拟磁盘进行的更改不会影响链接克隆,对链接克隆磁盘所做的更改也不会影响父虚拟机。但是如果父虚拟机损坏或快照点删除,链接克隆的虚拟机也不能使用;如果父虚拟机移动位置,需要重新指定父虚拟机的位置,再启动链接克隆虚拟机。

    展开全文
  • 这是加密狗复制克隆软件,可以完成部分正版加密狗复制工作,为正版软件获得更多的应用授权。 加密狗,是一种插在计算机并行口上的软硬件结合的软件加密产品,硬件加密锁、FreeEIM,俗称“加密狗”,加密狗一般都有...
  • 虚拟机快照和克隆区别

    千次阅读 2021-03-19 10:01:11
    基于模板虚拟机的某个状态建立新虚拟机副本,当你有使用多个虚拟机需求的时候,除了默认重新安装以外,还可以通过虚拟化克隆技术来生成新的虚拟机,克隆之前都必须有模板机,克隆只能在关机状态下做 链接克隆:...
  • 加密狗克隆机、复制狗工具,弓15个文件,r2 r4加密狗 基层代码复制加密狗!
  • Java对象克隆——浅克隆和克隆区别

    万次阅读 多人点赞 2017-08-06 00:51:35
    在Java中对象的克隆有深克隆和克隆之分。有这种区分的原因是Java中分为基本数据类型引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的。基本数据类型存储在栈中,引用数据类型存储在堆中。 ...
  • JAVA深复制(深克隆)与浅复制(浅克隆)

    千次阅读 2019-01-14 14:19:54
    1.浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 2.深复制(深克隆) 被复制...
  • 复制克隆和合并全部或部分 javascript 对象。 安装 轻松通过 。 npm install copy-object 用法 var result = copyObject ( sourceObject [ , destinationObject , keyList ] ) destinationObject是,如果未...
  • U盘文件自动克隆复制

    2018-10-22 18:40:19
    U盘克隆复制自动文件拷贝,根据需要备份的资料插上U盘后自动进行后台工作
  • 硬盘完美复制克隆品牌机一键还原。亲测联想品牌机,可完美复制F2一键还原备份文件。是您更换硬盘,复制系统的最佳工具
  • 模版机损坏: 完整克隆不受影响 链接克隆无法使用(如果是由快照克隆的虚拟机,模版机损坏或者快照被删除都会导致链接克隆无法使用。要删除此快照,对应的链接克隆也会同时被删。) 性能: ...克隆...
  • 复制和克隆

    2016-07-16 23:18:02
    克隆:分为浅复制、深复制。 浅复制:将对象的数据进行复制,但是对象中包含的对象,仍旧只是复制对象的引用。 深复制:不仅复制对象的基本类型属性,对于对象中包含的对象的数据也进行复制。 要实现克隆,需要重写...
  • 该程序允许您将图形复制到另一个图形。 例如,假设您要将图1复制到图4。然后键入clonefig(1,4)。 这对我来说非常有用,因为有时我运行一个输出图 1 的程序。然后我想用不同的参数运行该程序,并比较输出。 所以我...
  • java对象复制克隆

    2013-10-28 08:52:09
    深度复制Java对象实例,复制后对象属性值改变不影响被复制对象,有注释
  • handle或hgsetget类错过了... 一些简短的说明: - 此实现(希望)还处理继承的私有或受保护属性的深度复制(讨论“克隆句柄对象 - 使用 MATLAB OOP”-> 确认中的链接)。 - 它处理包含句柄对象的属性-它不处理循环引
  • 实例一:邮件复制(浅克隆) 由于邮件对象包含的内容较多(如发送者、接收者、标题、内容、日期、附件等),某系统中现需要提供一个邮件复制功能,对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件...
  • Smith通过向每个块添加“复制”,“粘贴”克隆”功能来扩展矩阵字段的本机行为。 这使您可以复制矩阵块,甚至可以在不同部分的条目之间复制和粘贴内容。 Smith将这些功能添加到每个矩阵块右上方的设置“ cog”...
  • 复制克隆-源码

    2021-02-13 09:06:45
    复制克隆
  • 修改 -名称- - 存储路径-。 MAC地址设定建议使用 - 为所有网卡重新生成MAC地址 - ,毕竟谁也不希望看到同时运行的两个虚拟机的 MAC是一样的。 点击 - 下一步 - 。 使用默认的 - 完全复制 - 选项。 点击 - ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,110
精华内容 47,244
关键字:

复制和克隆的区别