import java.io.*; @SuppressWarnings("all") public class CloneBySerializable implements Serializable { private int j; private Thing thing; public CloneBySerializable(int j) { this.j = j; this.thing = new Thing(j); } public static void main(String[] args) { CloneBySerializable[] arr = new CloneBySerializable[10000]; for (int i = 0, length = arr.length; i < length; i++) { arr[i] = new CloneBySerializable(i); } try { long t1 = System.currentTimeMillis(); ByteArrayOutputStream buf = new ByteArrayOutputStream(); ObjectOutputStream o = new ObjectOutputStream(buf); for(int i = 0; i < arr.length; i++) o.writeObject(arr[i]); ObjectInputStream in = new ObjectInputStream( new ByteArrayInputStream( buf.toByteArray())); CloneBySerializable[] copy = new CloneBySerializable[arr.length]; for(int i = 0; i < copy.length; i++) copy[i] = (CloneBySerializable) in.readObject(); long t2 = System.currentTimeMillis(); System.out.println("Duplication via serialization: " + (t2 - t1) + " Milliseconds"); } catch (Exception ex) { ex.printStackTrace(); } //单例类防止复制 Dog newDog = (Dog) deepCopy(Dog.INSTANCE); System.out.println(newDog == Dog.INSTANCE); //true } static class Dog extends Exception { public static final Dog INSTANCE = new Dog(); private Dog() {} public String toString(){ return "Woof"; } //用于解决返回新实例的问题 private Object readResolve(){ return INSTANCE; } } static public Object deepCopy(Object obj){ try{ ByteArrayOutputStream bos = new ByteArrayOutputStream(); new ObjectOutputStream(bos).writeObject(obj); ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray()); return new ObjectInputStream(bin).readObject(); } catch(Exception e) { throw new IllegalArgumentException(e); } } } @SuppressWarnings("all") class Thing implements Serializable { private int i; public Thing(int i) { this.i = i; } }
java序列化实现的对象复制性能比clone差
一个实现了Serializable 的单例类,必须有一个readResolve 方法,用以返回它的唯一的实例。
对一个实现了Serializable 的类进行了扩展,或者实现了一个扩展自Serializable 的接口,
使得我们在无意中实现了Serializable。
相关推荐
标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制了原对象的所有属性,还复制了嵌套的对象引用,使得修改复制后的对象不会影响到原始对象。 **浅拷贝**:在浅拷贝中...
在MyBatis中,我们通常会定义Mapper接口和XML配置文件,映射SQL语句与Java对象之间的关系。如果需要在数据库操作后复制对象,可以在Mapper接口的方法中,或者在Service层中实现对象复制。 总的来说,Java中的对象...
总结,Java中的对象克隆是一项重要的功能,用于复制和独立化对象。通过实现`Cloneable`接口和覆盖`clone()`方法,我们可以创建浅克隆对象。对于更复杂的场景,可以自定义克隆逻辑或利用序列化来实现深克隆。理解并...
Java对象的序列化是将一个对象的状态转换成字节流的过程,以便于存储、网络传输或复制。在Java中,实现`Serializable`接口的类可以被序列化。然而,有时我们可能希望在序列化过程中忽略某些敏感或临时的成员变量。这...
为了使一个Java对象能够被序列化,该类必须实现`java.io.Serializable`接口。虽然这个接口没有任何方法,但它的存在告诉JVM这个类的实例可以被转换为字节流。如果一个类没有实现这个接口,尝试序列化其对象时会抛出...
Java对象序列化是一种将Java对象转换为字节流的过程,以便于存储、传输或在网络间进行通信。这一过程使得对象的状态能够被持久化,即使在程序关闭后也能重新恢复。在Java中,对象序列化是通过实现`java.io....
克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,...
Java对象深复制与浅复制是Java编程中两个重要的概念,它们都是对象复制的方式,但它们有着不同的实现机制和应用场景。在本文中,我们将详细介绍Java对象深复制与浅复制的概念、实现机制、应用场景和示例代码。 浅...
在Java编程语言中,对象复制是一个常见的操作,用于创建一个现有对象的新副本。有两种主要的复制方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方法在处理对象时有不同的行为和应用场景,特别是在...
在Android中,我们常常需要复制Parcelable或Serializable类型的对象,因为它们是Android系统支持的数据传输和序列化方式。对于Parcelable,我们可以使用`Parcel`类的`writeParcelable`和`readParcelable`方法进行...
Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储这些对象或通过网络进行传输。这个过程是Java平台的核心特性,它允许开发者将复杂的对象结构持久化或者在网络间进行安全通信。序列化不仅可以用于...
要实现Java对象的序列化,类必须实现`java.io.Serializable`接口。虽然这个接口不包含任何需要实现的方法,但它的存在表明该类的实例是可序列化的。 序列化的主要步骤包括: 1. **实现Serializable接口**:首先,你...
当一个Java对象需要被序列化时,开发者需要确保该对象的类实现了`Serializable`接口。这是因为Java的序列化机制依赖于这个接口来识别哪些对象可以被序列化。 在描述中提到,`JSP`规范并没有强制要求`BEAN`实现`...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是实现对象持久化的关键。本文将深入探讨`Serializable`接口的细节,以及与其相关的高级知识。 `Serializable`接口是Java中的一个标记接口,没有包含...
Java序列化是指将一个Java对象的状态转换为字节流,以便于存储或通过网络进行传输的过程。当接收端接收到这些字节流后,可以将其重新转换为原始的对象状态。这个过程对于分布式系统的数据交换非常重要。 #### 二、...
在Java编程语言中,克隆是一种创建对象副本的技术,它允许我们复制一个对象的状态而不影响原始对象。...在设计类和系统时,应考虑对象复制的需求,并决定是否实现`Cloneable`接口,以及选择哪种克隆策略。
在Java编程语言中,面向对象特性是其核心概念之一,其中引用来传递对象是一个非常重要的知识点。本教程将深入探讨Java中的引用传递机制,并通过视频教程的形式帮助学习者更好地理解和应用这一概念。 首先,理解...
Java对象拷贝常见面试题及应答汇总 在Java编程中,对象拷贝是一种常见的操作, 涉及到对象的复制和克隆。下面总结了一些常见的面试题和应答,供大家学习和参考。 为什么要使用克隆? 在某些情况下,我们需要对一...
- **序列化**: 将一个Java对象转换为字节流的过程。这个过程使得对象可以在不考虑其创建环境的情况下,在不同的时间、地点被重建。 - **反序列化**: 将字节流还原为原来的Java对象的过程。这个过程确保对象的所有...
在Java编程语言中,"深度克隆"是一个重要的概念,主要涉及到对象复制。深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个...