`

deep copy

 
阅读更多
static public Object deepCopy(Object oldObj) {
    ObjectOutputStream oos = null;
    ObjectInputStream ois = null;
    try {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        oos = new ObjectOutputStream(bos);
        // serialize and pass the object
        oos.writeObject(oldObj);
        oos.flush();
        ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray());
        ois = new ObjectInputStream(bin);
        // return the new object
        return ois.readObject();
    } catch (Exception e) {
        System.out.println("Exception in ObjectCloner = " + e);
        return null;
    } finally {
        try {
            oos.close();
            ois.close();
        } catch (Exception e) {
            return null;
        }
    }
}

 

as you see, it's the way of making deep copy, just by streams of input and out, first output and then input and last the product object.

here, one problem, why is the parameter of the first constructor of the inputstream chain the bos but oos?

cuz bos locates in the end part of the outputstream chain, it's the most out part of the decorator, right!?

分享到:
评论

相关推荐

    android 浅复制和深复制-Java Generic Deep Copy 篇

    而深复制(Deep Copy)则是不仅复制对象本身,还递归地复制它引用的对象,确保新对象与原对象及引用的对象完全独立。 在Android中,我们常常需要复制Parcelable或Serializable类型的对象,因为它们是Android系统...

    10 numpy的 copy & deep copy (教学教程)

    10_numpy的_copy_&_deep_copy_(教学教程)

    浅拷贝和深拷贝深入理解(shallow copy VS deep copy)

    深拷贝(Deep Copy): 深拷贝不仅复制值类型字段,还会递归地复制所有引用类型字段,确保新对象与原对象之间没有任何关联。在C#中,可以采用以下方法实现深拷贝: 1. 实现`ICloneable`接口:通过自定义`Clone`方法...

    copy的使用(深拷贝、浅拷贝)

    在Python编程语言中,"copy"模块提供了对对象复制的功能,包括浅拷贝(shallow copy)和深拷贝(deep copy)。这两种拷贝方式在处理复杂数据结构时尤为重要,因为它们之间的区别会影响到拷贝的对象及其引用。让我们...

    php-myclabs-deep-copy-1.10.1-1.el7.remi.noarch.rpm

    php-myclabs-deep-copy-1.10.1-1.el7.remi.noarch.rpm

    python中copy()与deepcopy()的区别小结

    接触python有一段时间了,一直没有系统的学习过,也对copy,deepcoy傻傻的分不清,故抽出时间来理一下。 下面这篇文章主要给大家介绍了关于python中copy()与deepcopy()的区别的相关资料,需要的朋友可以参考下

    复制对象(二)<NSCopying>协议和属性的copy特性对应的Demo

    当一个对象的`copy`属性被设置时,它会创建该对象的一个副本,这个副本通常是一个浅拷贝(shallow copy),除非对象实现了`NSCopying`协议并返回深拷贝(deep copy)。浅拷贝只复制对象本身,而不复制它所包含的对象...

    copy 深/浅

    deep_copy = copy.deepcopy(original) # 再次修改原对象的引用类型属性 original.list.append(5) print(original.list) # 输出:[1, 2, 3, 4, 5] print(deep_copy.list) # 输出:[1, 2, 3],不受原对象修改的影响 ...

    Copy Constructors and Assignment Operators终极解释

    为了解决这个问题,程序员通常需要实现深拷贝(Deep Copy),即在复制构造函数和赋值运算符中,不仅复制指针,还要复制指针所指向的内存。这样,每个对象都有独立的内存,不会相互影响。此外,还有一种特殊情况是"自...

    关于java中的深copy与浅copy的问题

    深拷贝(Deep Copy)则更复杂,它不仅复制对象本身,还会递归地复制对象引用的对象。换句话说,深拷贝创建的是一个完全独立的对象,即使修改了原始对象,也不会影响到深拷贝的对象。在Java中,实现深拷贝通常需要...

    python-copy函数用法.doc

    Python中的`copy`模块提供了两种方法来复制对象:浅复制(shallow copy)和深复制(deep copy)。这两个概念在处理复杂数据结构如列表、字典、集合等时尤为重要,因为它们涉及到对象引用的问题。 浅复制是通过`copy...

    python-copy函数用法.docx

    Python中的`copy`模块提供了两种复制对象的方式:浅复制(shallow copy)和深复制(deep copy)。这两种复制方法在处理复杂数据结构如列表、字典等时有着显著的区别。 ### 浅复制 浅复制是默认的复制行为,通过`....

    复制对象(一)copy和mutableCopy方法对应Demo

    4. 深复制(Deep Copy): 深复制会创建一个新的对象,并且复制原始对象的所有属性,包括引用类型的属性。如果属性是复杂的数据结构,比如数组或字典,深复制会递归地复制所有子对象,确保每个副本都有自己的内存...

    面向对象程序设计英文教学课件:08 Copy Control.ppt

    这种默认行为在大多数简单情况下是合适的,但当对象包含动态分配的内存(如指针)时,可能会引发问题,因为这可能导致浅复制(Shallow Copy),而不是深复制(Deep Copy),从而引起悬挂指针或内存泄漏。 拷贝构造...

    operator overloading and copy constructors 英文原版

    复制构造函数在C++中涉及到两种复制类型:浅复制(shallow copy)和深复制(deep copy)。浅复制仅仅复制对象的指针,导致多个对象指向相同的内存区域,这在复制包含指针的复杂对象时会引起问题。深复制则复制指针所...

    面向对象程序设计英文教学课件:08-Copy-Control.pptx

    因此,为了正确地处理这类对象,我们需要定义自定义的拷贝构造函数和赋值运算符来实现深复制(deep copy),确保每个对象都有自己的独立内存。 在《C++ How to Program》第8版的第9.10章中,作者详细介绍了如何定义...

    python-拷贝构造函数.docx

    然而,Python提供了类似的功能,包括浅拷贝(shallow copy)和深拷贝(deep copy),通过`copy`模块来实现。 拷贝构造函数的主要目的是在创建新对象时,将已有对象的属性和状态复制过来,这样新旧对象虽然属性相同...

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    深复制(Deep Copy)不仅复制对象本身,还复制对象引用的对象,确保新创建的对象拥有完全独立的一份数据。在Objective-C中,实现深复制通常需要递归地复制对象的所有属性,以确保所有引用的对象都被复制,而不是共享...

    Core C++ A Software Engineering Approach

    真是软磨硬泡啊,印象最深的就是作者讲解deep copy and shadow copy 还有 const come in serial area,太棒了,本书初版发行于2000年,是以C++99为标准的。 Core C++ A Software Engineering Approach Victor Shtern...

Global site tag (gtag.js) - Google Analytics