`
lenozhi
  • 浏览: 52268 次
社区版块
存档分类
最新评论

深度clone

 
阅读更多

这招好使,深度clone不用一个个的set考虑关系了。   


    public static byte[] toByteArray(Object object) throws IOException {
        if (object == null) return new byte[0];
       
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(bos));
       
        try {
            oos.writeObject(object);
            oos.flush();
           
            return bos.toByteArray();
        } finally {
            bos.close();
            oos.close();
        }
    }
   
    public static Father fromByteArray(byte[] bytes) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = null;
       
        try {
            ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(bytes)));
            return (Father) ois.readObject();
        } finally {
            try {
                if (ois != null) ois.close();
            } catch (IOException e) {}
        }
    }
   
    public byte[] toByteArray() throws IOException {
        return toByteArray(this);
    }
   
    @Override
    public Father clone() throws CloneNotSupportedException {
        Father model = null;
        try {
            model = Father.fromByteArray(this.toByteArray());
        } catch (Exception e) {
            throw new CloneNotSupportedException(e.getMessage());
        }
       
        return model;
    }

分享到:
评论

相关推荐

    Java利用序列化实现对象深度clone的方法

    此外,序列化有一定的性能开销,因此在不需要深度克隆或者对象不包含大量数据的情况下,可能更适合使用浅克隆(`Object.clone()`)或者其他克隆策略。对于大型复杂对象,可以考虑使用更高效的库,如Apache Commons ...

    clone 深度克隆对象

    实现深度克隆可以采用实现Cloneable接口并重写clone(),或者利用序列化和反序列化技术,具体选择取决于应用场景和性能需求。在实际项目中,应根据具体情况权衡效率和安全性,合理选择克隆策略。

    浅析Java中clone()方法浅克隆与深度克隆

    在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep Clone)。 1. 浅克隆(Shallow Clone) 浅克隆是Java克隆机制的默认行为。当一个对象被克隆时,如果它的成员变量是基本类型(如int、double...

    clone()示例源码

    `clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存管理中扮演着关键角色。 首先,让我们理解`clone()`的基本用法。`clone()`方法创建并返回一个当前对象的副本,新创建的对象与原对象具有...

    java clone的小例子

    为了得到深拷贝,即完全独立的副本,你需要手动实现深度复制逻辑,例如,遍历引用类型字段并逐个复制每个元素。 总之,`clone()`方法在Java中提供了对对象复制的基本支持,尤其适用于需要创建对象副本的情况。然而...

    百度校园招聘笔试题-WEB前端工程师-电子科技大学.pdf

    【JavaScript对象深度Clone】 深度克隆一个对象,需要递归复制所有属性及其值。以下是一个简单的实现: ```javascript function deepClone(obj) { if (obj === null) return obj; let clone = obj instanceof ...

    List Clone.zip_c list深度复制_list clone_list的深度复制 C#

    List的深度复制 浅谈C#中List<T>对象的深度拷贝问题

    git clone 最新版

    - `--depth `<n>`:限制克隆的历史深度,可以加快克隆速度,但只保留最近的n个提交。 - `--branch `<branch>`:克隆特定的分支而不是默认的主分支。 - `--single-branch`:仅克隆指定的分支,而不是所有分支。 - `--...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

    go-clone:深度克隆任何Go数据

    go-clone:深度克隆任何Go数据 包clone提供了对任何Go数据进行深度克隆的功能。 它还提供了一个包装器,以保护指针免受任何意外的突变。 Clone / Slowly可以克隆任何结构的未导出字段。 明智地使用此功能。 安装 ...

    clone-voice.zip

    "clone-voice.zip" 是一个压缩包文件,很可能包含了与语音克隆技术相关的代码或工具。根据提供的标签 "python",我们可以推测这个项目是使用Python编程语言实现的。Python在处理音频数据和人工智能领域有着广泛的...

    2009百度校园招聘笔试题-WEB前端工程师

    JavaScript对象的深度Clone 实现对象的深度克隆通常可以使用递归函数或者JSON序列化/反序列化的方式: ```javascript function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj; ...

    Realtime-Voice-Clone-Chinese.zip

    综上所述,“Realtime-Voice-Clone-Chinese.zip”所代表的实时中文语音克隆模型是人工智能领域的一个重要突破,它不仅展示了深度学习在语音处理中的强大能力,也为未来的创新应用开辟了新的道路。随着技术的进一步...

    中文语音克隆内含数据集和预训练模型:voice clone.zip

    在语音克隆中,这种模型通常是基于深度学习的神经网络,例如 Tacotron 或 WaveNet。这些模型已经在大量的语音数据上进行了训练,学会了将文本转化为自然的语音。预训练模型可以作为基础,通过进一步的微调以适应特定...

    clone

    - **深度克隆**:不仅复制对象本身,还递归地复制它引用的对象,确保新创建的对象和原始对象及其所引用的对象都完全独立。 3. **版本控制系统中的克隆** 在版本控制软件(如Git)中,克隆指的是获取远程仓库的...

    java深度克隆

    在`clone()`方法中调用了`super.clone()`和`homeAddr.clone()`,确保了深度克隆。 ##### 3.2 使用序列化与反序列化 这种方法利用Java的序列化机制实现深度克隆。具体步骤如下: 1. **实现Serializable接口**:...

    clone-json:深度复制json

    $ npm install clone-json --save # Install with yarn $ yarn add clone-json 用法 两个数组相等 let cloneJson = require ( 'clone-json' ) let json = { a : 123 , b : 'str' , c : true , d : [ 1 , '2' , ...

    proxy-clone:基于ES6代理的深度克隆

    基于的深度克隆,在处理大对象时比传统的克隆实现效率更高。 需要节点6或更高版本。 注意:这不是传统的clone()。 对源对象的更改将反映在克隆中,但是对克隆的更改不会修改源。 表现 根据对象大小的不同, ...

Global site tag (gtag.js) - Google Analytics