`
winnie825
  • 浏览: 120243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对象的复制

    博客分类:
  • java
 
阅读更多

java的对象复制有两种方式:实现Serializable和实现Cloneable。

 

两者都能实现对象的复制,但是各有利弊:

1. 实现Cloneable必须实现clone()方法,clone方法复制对象非常简单,但是这样会对原始对象有侵入性,不利于对象的扩展:假设有一个新对象继承实现Cloneable的对象,那么新对象想要实现复制,就必须重写clone()方法。

2. 实现Serializable在复制对象时,方法相对复杂,需要使用ByteArrayOutputStream、ObjectOutputStream、ByteArrayInputStream、ObjectInputStream等类,但是无侵入性。

 

 

package com.sg.deepcopy;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * <b>DeepCopy.java</b>
 * @author yanlei
 * @version 1.0 Jun 9, 2012
 */
public class DeepCopy {
    
    public static Object streamCopy(Object obj) throws IOException, ClassNotFoundException{
        //初始化输出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream objOut = new ObjectOutputStream(out);
        //将对象写入缓存
        objOut.writeObject(obj);
        objOut.flush();
        objOut.close();
        
        //初始化输入流
        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
        ObjectInputStream objIn = new ObjectInputStream(in);
        //构造对象
        return objIn.readObject();
    }
    
    public static CloneUser cloneCopy(CloneUser user) throws CloneNotSupportedException {
        return (CloneUser) user.clone();
    }
    
    public static void main(String[] args) throws IOException, ClassNotFoundException, CloneNotSupportedException {
        
        System.out.println("//使用字节流复制");
        User user1 = new User("zhangsan");
        System.out.println("user1的hash值" +user1);
        
        User user2 = (User)streamCopy(user1);
        System.out.println("user2的hash值" +user2);
        
        
        System.out.println("//使用clone方法复制");
        CloneUser cloneUser1 = new CloneUser("lisi");
        System.out.println("cloneUser1的hash值" +cloneUser1);
        CloneUser cloneUser2 = cloneCopy(cloneUser1);
        System.out.println("cloneUser2的hash值" +cloneUser2);
    }
    
}

class User implements Serializable{
    
    public User(){}
    
    public User(String name) {
        this.name = name;
    }
    
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class CloneUser implements Cloneable {
    public CloneUser(){}
    
    public CloneUser(String name) {
        this.name = name;
    }
    
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
分享到:
评论

相关推荐

    java不同对象及集合的多次复制

    在Java编程中,对象复制是一项常见的任务,特别是在处理模型(Model)和视图对象(VO)时。模型对象通常用于封装业务数据,而视图对象则用于展示这些数据。值复制,即对象属性值的复制,是保持数据一致性和简化代码...

    java对象复制克隆

    在Java编程中,对象复制和克隆是两个重要的概念,特别是在处理复杂数据结构时。对象复制通常分为浅拷贝和深拷贝。标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制...

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    MyBatis是一个流行的Java持久层框架,它简化了数据库操作,而对象复制则是处理业务逻辑时的常用技巧。 首先,我们要理解Java中的对象复制有浅拷贝和深拷贝两种方式。浅拷贝只复制对象本身,不复制引用的对象;深...

    类继承与对象复制的细节.zip_类继承与对象复制的细节

    在编程世界中,类继承和对象复制是两个基础但至关重要的概念,它们构成了面向对象编程的核心。本资料详细探讨了这两个主题,旨在帮助开发者更好地理解和应用这些知识点。 类继承是面向对象编程的一个特性,它允许...

    BeanUtilsBean对象复制使用(类型可以自动转化)

    本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是BeanUtils的核心类,提供了对JavaBean属性的便捷访问和操作。 首先,让我们理解什么是对象复制。对象复制是指将...

    java对象复制.pdf

    Java对象复制是一个重要的概念,它涉及到Java中对象的深拷贝和浅拷贝。当我们需要一个与原有对象具有相同属性的新对象,但不希望修改新对象会影响原对象时,就需要进行对象复制。Java提供了多种复制对象的方式,其中...

    软件定义存储中的对象复制服务.pptx

    ### 软件定义存储中的对象复制服务 #### 一、对象复制的原理与机制 **对象复制**作为一项关键的数据保护技术,在软件定义存储(SDS)领域扮演着至关重要的角色。它允许用户在不同位置维护数据的多个副本,以此来提高...

    编程语言java对象复制.pdf

    在标题“编程语言java对象复制.pdf”和描述“编程语言java对象复制.pdf”中,明确指出了文档的主题是关于Java编程语言中对象复制的技术知识。在给出的内容部分中,通过具体的Java代码示例,讨论了在Java中实现对象...

    example2_24.rar_C++ 对象 复制

    标题“example2_24.rar_C++ 对象 复制”表明我们将探讨的是C++中的对象复制机制,这通常涉及到复制构造函数和赋值运算符。 复制构造函数是一种特殊的构造函数,它的任务是创建一个新对象作为现有对象的副本。描述中...

    java对象复制[参考].pdf

    在Java编程中,对象复制是一个常见的需求,特别是在软件开发中处理数据对象时。Java对象复制主要分为浅复制(Shallow Copy)和深复制(Deep Copy)。本文将深入探讨Java对象复制,特别是通过`clone()`方法实现的复制...

    基于CORBA的容错对象复制算法

    《基于CORBA的容错对象复制算法》一文深入探讨了在分布式计算环境中,如何利用CORBA(Common Object Request Broker Architecture)框架实现容错对象复制的技术细节与算法设计。CORBA作为一项成熟的企业级分布式计算...

    深化理解JavaScript中的对象复制(Object Clone)_.docx

    在JavaScript中,对象复制,也称为克隆,是一项关键的编程技巧,用于创建一个对象的新副本,而不会改变原始对象。JavaScript的浅复制和深复制是两个重要的概念,它们在处理复杂数据结构时尤为关键。 浅复制...

    java对象复制

    在Java编程中,对象复制是一个常见的需求,尤其是在处理复杂数据结构时。Java对象的复制主要有两种方式:浅复制(Shallow Copy)和深复制(Deep Copy)。标题中的"java对象复制"主要涉及到Java中对象复制的基本概念...

    Objective-C的内存管理和对象复制

    本人查阅资料,以ppt的形式描述了iOS开发过程中可能困扰程序员的内存管理和对象复制等常见问题,以及iOS开发环境的升级带来的变化情况。 适合有入门基础的程序开发人员参考。

    java不同对象之间及集合的复制

    在Java应用中,我们可能需要将Model对象转换为VO对象,这时就需要进行对象复制。 2. **值复制**: 值复制是指复制一个对象时,创建一个新的对象并复制原对象的所有属性值。在Java中,如果类的属性都是基本类型,可以...

    Java对象的复制克隆

    Java中的对象复制与克隆是程序开发中常见的需求,主要用于创建一个对象的副本,而不会影响原始对象的状态。这里主要讨论两种类型的对象拷贝:浅拷贝和深拷贝。 浅拷贝,也称为表面拷贝,是创建一个新的对象,然后将...

    CORBA对象的复制技术研究

    《CORBA对象的复制技术研究》一文深入探讨了CORBA(Common Object Request Broker Architecture,通用对象请求代理体系结构)对象复制技术的关键概念、理论框架及其在分布式系统中的应用。CORBA作为一项主流的分布式...

    对象复制:将静态属性,原型属性和描述符从一个对象复制到另一个对象

    对象复制 将静态属性,原型属性和描述符从一个对象复制到另一个对象。安装使用安装: $ npm install --save object-copy用法var copy = require ( 'object-copy' ) ;API将静态属性,原型属性和描述符从一个对象复制...

    将数据复制或剪切到剪贴板上 .rar_C++ 对象 复制_COleDataSource_Export2Excel.zip_ole

    确定将要被复制的数据是一个本地数据还是一个嵌入对象或链接。 ---- 如果数据是一个嵌入对象或链接,创建一个指向被选定数据的COleClientItem指针。 ---- 如果数据是本地化的并且应用程序是一个服务器,那么从...

    用于对象间的复制

    标题"用于对象间的复制"表明我们关注的是一个能够帮助我们便捷地在Java对象之间进行复制的工具或库,而描述中提到的"jar挺好用的贡献出来"暗示我们可能在讨论一个开源的Java库,这个库简化了对象复制的过程。...

Global site tag (gtag.js) - Google Analytics