`

Java深拷贝除了通过实现Cloneable接口,另外还可以通过序列化实现对象的拷贝。

 
阅读更多
代码如下:
import java.io.Serializable;

public class CloneUtils {
	public static <T extends Serializable> T Clone(T obj) {
		T cloneObj = null;
		try {
			//字节数组流写入内存缓冲区
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(obj);
			oos.close();
			
			//读取内存缓冲区数据,转换为字节
			ByteArrayInputStream bai = new ByteArrayInputStream(
					baos.toByteArray());
			ObjectInputStream ois = new ObjectInputStream(bai);
			cloneObj = (T) ois.readObject();
			ois.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return cloneObj;
	}
被拷贝的类,需要实现序列化接口Serializable接口。
分享到:
评论

相关推荐

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 示例代码

    深拷贝可以通过序列化和反序列化实现,或者手动实现Cloneable接口并重写`clone()`方法。 示例代码(使用序列化): ```java import java.io.*; class MyClass implements Serializable { int a; String b; ...

    java对象复制克隆

    标签中的“复制java对象”、“深度克隆”和“深度复制实例”强调了我们要关注的是Java中如何实现对象的深拷贝,并提供了实际操作的例子。在编写代码时,应该遵循良好的编程实践,包括适当的命名、注释和错误处理,以...

    Java Clone深拷贝与浅拷贝的两种实现方法

    使用 clone 方法可以实现对象的深拷贝和浅拷贝,它可以帮助我们在编程中方便地复制对象。但是,我们需要注意的是,clone 方法的使用需要遵守一定的规则,例如,需要实现 Cloneable 接口,需要重写 clone() 方法等。 ...

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    但是,Serialized方法需要对象实现Serializable接口,并且可能会出现序列化和反序列化的错误。 Java中实现深拷贝的两种方式—clone()和Serialized—are two effective methods to achieve deep copying in Java. By...

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

    2. **克隆(Clone)**:通过重写`Object`类的`clone()`方法可以实现对象的拷贝。但是,这要求被拷贝的对象必须实现`Cloneable`接口,并且通常需要递归调用子对象的`clone()`方法,以确保所有引用的对象也被拷贝。 3...

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

    - **序列化与反序列化**:将对象序列化为字节数组,然后再反序列化为新的对象,实现深拷贝。 3. **注解实现对象复制** - **Apache Commons BeanUtils库**:提供了`BeanUtils.copyProperties()`方法,可以快速实现...

    《剑指offer》Java浅拷贝和深拷贝.pdf

    在Java中实现深拷贝通常需要手动创建新的对象并逐个复制字段,或者使用序列化和反序列化的方法。 在选择拷贝方式时,应根据对象的特性来决定。如果对象中没有引用数据类型或引用数据类型不需要单独拷贝,那么浅拷贝...

    Java对象(最后面是序列化的知识)1

    另外,除了`Serializable`接口,还可以实现`Externalizable`接口来自定义序列化和反序列化的全过程,但这样要求类必须有一个无参构造函数。 在反序列化过程中,有时需要验证对象的完整性,这可以通过`...

    JAVA创建对象的四种方法

    - clone() 方法是 Java 中的一个方法,它可以创建对象的拷贝,但是需要实现 Cloneable 接口,clone() 方法可以创建浅拷贝或深拷贝,浅拷贝只拷贝对象的引用,而深拷贝则拷贝对象的所有成员变量。 - 序列化机制是 ...

    java 深度拷贝 复制 深度复制.zip

    在实际应用中,我们还可以考虑使用序列化和反序列化的方式实现深度拷贝,或者使用第三方库如Apache Commons Lang的`DeepClone`方法,它们提供了更简便的解决方案。但这里我们重点讨论了如何仅通过Java反射机制来实现...

    java 对象克隆

    通过实现`Cloneable`接口和覆盖`clone()`方法,我们可以创建浅克隆对象。对于更复杂的场景,可以自定义克隆逻辑或利用序列化来实现深克隆。理解并正确应用这些概念对于开发复杂的Java应用程序至关重要。

    详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)

    在Java中,深拷贝可以通过序列化和反序列化来实现,这实际上是将对象转换为字节流,然后再从字节流中恢复为新的对象。在上面的代码中,`CloneUtils.clone()`方法就实现了深拷贝: ```java public class CloneUtils ...

    Java 细数浅拷贝和深拷贝

    除了通过实现`Cloneable`接口和利用序列化机制外,还可以通过以下方式实现拷贝: - 使用Java反射API来复制对象。 - 使用Apache Commons Lang库中的`BeanUtils.copyProperties`方法。 - 使用第三方库如Guava提供的...

    java深入理解浅拷贝和深拷贝

    例如,可以通过创建一个新的对象,并逐个复制原对象的属性(包括引用类型的属性),或者使用序列化库(如Google的Gson或Apache的BeanUtils)来完成这个过程。 Java的`clone()`方法默认执行的是浅拷贝,因为它只复制...

    一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    通过这种方式,C#可以实现真正的深拷贝,即使对象中包含复杂的嵌套结构。与Java的`clone()`方法相比,C#的序列化方法更加通用,不需要每个类都实现特定的复制逻辑,但可能在性能上略逊色于手动实现的深拷贝。 总的...

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

    通过实现`Cloneable`接口并覆写`clone()`方法,或者使用如上所述的泛型深拷贝工具类,我们可以有效地对数据对象进行复制,保证应用的稳定性和正确性。在处理复杂数据结构时,深拷贝能防止意外的改动影响到原始数据,...

    浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)实战工程

    2. **序列化和反序列化**:通过将对象序列化为字节流,然后反序列化为新的对象,可以实现深拷贝。这种方法适用于所有的Java对象,但效率较低,并且需要类实现Serializable接口。 3. **手动复制属性**:程序员可以...

    Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍

    在Java中,通过实现`Cloneable`接口并覆盖`Object`类的`clone()`方法,可以实现浅拷贝。以下代码展示了浅拷贝的例子: ```java public class ShallowCopy { public static void main(String[] args) { Professor0...

    java深复制浅复制的实现源代码

    为了解决这个问题,可以使用序列化和反序列化的方法实现深复制,或者使用第三方库如Apache Commons Lang的`SerializationUtils.clone()`方法。 另外,提到“实现java类之间的多对多联系”,在Java中,多对多关系...

Global site tag (gtag.js) - Google Analytics