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编程中,对象复制是一项常见的任务,特别是在处理模型(Model)和视图对象(VO)时。模型对象通常用于封装业务数据,而视图对象则用于展示这些数据。值复制,即对象属性值的复制,是保持数据一致性和简化代码...
在Java编程中,对象复制和克隆是两个重要的概念,特别是在处理复杂数据结构时。对象复制通常分为浅拷贝和深拷贝。标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制...
MyBatis是一个流行的Java持久层框架,它简化了数据库操作,而对象复制则是处理业务逻辑时的常用技巧。 首先,我们要理解Java中的对象复制有浅拷贝和深拷贝两种方式。浅拷贝只复制对象本身,不复制引用的对象;深...
在编程世界中,类继承和对象复制是两个基础但至关重要的概念,它们构成了面向对象编程的核心。本资料详细探讨了这两个主题,旨在帮助开发者更好地理解和应用这些知识点。 类继承是面向对象编程的一个特性,它允许...
本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是BeanUtils的核心类,提供了对JavaBean属性的便捷访问和操作。 首先,让我们理解什么是对象复制。对象复制是指将...
Java对象复制是一个重要的概念,它涉及到Java中对象的深拷贝和浅拷贝。当我们需要一个与原有对象具有相同属性的新对象,但不希望修改新对象会影响原对象时,就需要进行对象复制。Java提供了多种复制对象的方式,其中...
### 软件定义存储中的对象复制服务 #### 一、对象复制的原理与机制 **对象复制**作为一项关键的数据保护技术,在软件定义存储(SDS)领域扮演着至关重要的角色。它允许用户在不同位置维护数据的多个副本,以此来提高...
在标题“编程语言java对象复制.pdf”和描述“编程语言java对象复制.pdf”中,明确指出了文档的主题是关于Java编程语言中对象复制的技术知识。在给出的内容部分中,通过具体的Java代码示例,讨论了在Java中实现对象...
标题“example2_24.rar_C++ 对象 复制”表明我们将探讨的是C++中的对象复制机制,这通常涉及到复制构造函数和赋值运算符。 复制构造函数是一种特殊的构造函数,它的任务是创建一个新对象作为现有对象的副本。描述中...
在Java编程中,对象复制是一个常见的需求,特别是在软件开发中处理数据对象时。Java对象复制主要分为浅复制(Shallow Copy)和深复制(Deep Copy)。本文将深入探讨Java对象复制,特别是通过`clone()`方法实现的复制...
《基于CORBA的容错对象复制算法》一文深入探讨了在分布式计算环境中,如何利用CORBA(Common Object Request Broker Architecture)框架实现容错对象复制的技术细节与算法设计。CORBA作为一项成熟的企业级分布式计算...
在JavaScript中,对象复制,也称为克隆,是一项关键的编程技巧,用于创建一个对象的新副本,而不会改变原始对象。JavaScript的浅复制和深复制是两个重要的概念,它们在处理复杂数据结构时尤为关键。 浅复制...
在Java编程中,对象复制是一个常见的需求,尤其是在处理复杂数据结构时。Java对象的复制主要有两种方式:浅复制(Shallow Copy)和深复制(Deep Copy)。标题中的"java对象复制"主要涉及到Java中对象复制的基本概念...
本人查阅资料,以ppt的形式描述了iOS开发过程中可能困扰程序员的内存管理和对象复制等常见问题,以及iOS开发环境的升级带来的变化情况。 适合有入门基础的程序开发人员参考。
在Java应用中,我们可能需要将Model对象转换为VO对象,这时就需要进行对象复制。 2. **值复制**: 值复制是指复制一个对象时,创建一个新的对象并复制原对象的所有属性值。在Java中,如果类的属性都是基本类型,可以...
Java中的对象复制与克隆是程序开发中常见的需求,主要用于创建一个对象的副本,而不会影响原始对象的状态。这里主要讨论两种类型的对象拷贝:浅拷贝和深拷贝。 浅拷贝,也称为表面拷贝,是创建一个新的对象,然后将...
《CORBA对象的复制技术研究》一文深入探讨了CORBA(Common Object Request Broker Architecture,通用对象请求代理体系结构)对象复制技术的关键概念、理论框架及其在分布式系统中的应用。CORBA作为一项主流的分布式...
对象复制 将静态属性,原型属性和描述符从一个对象复制到另一个对象。安装使用安装: $ npm install --save object-copy用法var copy = require ( 'object-copy' ) ;API将静态属性,原型属性和描述符从一个对象复制...
确定将要被复制的数据是一个本地数据还是一个嵌入对象或链接。 ---- 如果数据是一个嵌入对象或链接,创建一个指向被选定数据的COleClientItem指针。 ---- 如果数据是本地化的并且应用程序是一个服务器,那么从...
标题"用于对象间的复制"表明我们关注的是一个能够帮助我们便捷地在Java对象之间进行复制的工具或库,而描述中提到的"jar挺好用的贡献出来"暗示我们可能在讨论一个开源的Java库,这个库简化了对象复制的过程。...