`

对象序列化实现克隆

    博客分类:
  • Java
阅读更多

    所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新“装配”。是不是很神奇。 
  也许你会说,只了解一点点,但从来没有接触过,其实未必如此。RMI、Socket、JMS、EJB你总该用过一种吧,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。 
第一次使用Java的对象序列化是做XXX项目(其实我也只使用过这一次,千万别扔什么蔬菜、水果^_*),当时要求把几棵非常复杂的树(JTree)及相应的数据保存下来(就是我们常用的保存功能),以便下次运行程序时可以继续上次的操作。那时XML技术在网上非常的热,而且功能也强大,再加上树的结构本来就和XML存储数据的格式很像。作为一项对新技术比较有兴趣的我当然很想尝试一下。不过经过仔细分析,发现如果采用XML保存数据,后果真是难以想象:哪棵树的哪个节点被展开、展开到第几级、节点当前的属性是什么。真是不知该用A、B、C还是用1、2、3来表示。还好,发现了Java的对象序列化机制,问题迎刃而解,只需简单的将每棵树的根节点序列化保存到硬盘上,下次再通过反序列化后的根节点就可以轻松的构造出和原来一模一样的树来。 
  其实保存数据,尤其是复杂数据的保存正是对象序列化的典型应用。最近YYY项目就遇到了需要对非常复杂的数据进行存取,通过使用对象的序列化,问题同样化难为简。 
  对象的序列化还有另一个容易被大家忽略的功能就是对象复制(Clone),Java中通过Clone机制可以复制大部分的对象,但是众所周知,Clone有深层Clone和浅层Clone,如果你的对象非常非常复杂,假设有个100层的Collection(夸张了点),如果你想实现深层Clone,真是不敢想象,如果使用序列化,不会超过10行代码就可以解决。还有就是Swing组件,如果你有两个很象很象(或是一模一样)的比较难以构造的Swing组件,你该怎么办,也许你想到了Clone,但是偏偏Java 善(Sun)弄人,Swing组件没有提供Clone方法。别急,使用序列化,6行代码搞定, 

 

1.                              ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 

2.                              ObjectOutputStream out = new ObjectOutputStream(byteOut); 

3.                              out.writeObject(combo); 

4.                               

5.                              ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); 

6.                              ObjectInputStream in =new ObjectInputStream(byteIn); 

7.                              JComboBox comb2 = (JComboBox)in.readObject(); 

 

 

http://java.ccidnet.com/art/3741/20060414/506775_1.html   

 

 

分享到:
评论

相关推荐

    关于 Java 对象序列化您不知道的 5 件事

    Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...

    克隆和序列化(Java )

    在网络传输中,可以将对象序列化后发送,接收端再进行反序列化。 5. **示例**:`序列化.txt`可能包含以下代码: ```java import java.io.*; class SerializableClass implements Serializable { private ...

    java序列化和反序列化的方法

    在 Java 中,序列化和反序列化是通过实现 Serializable 接口来实现的。Serializable 接口是一个标记接口,不包含任何方法,但它告诉 Java虚拟机(JVM)该类可以被序列化。 在上面的代码中,我们可以看到 ...

    Java中对象的序列化方式克隆详解

    深克隆通过序列化和反序列化实现,首先将对象写入`ByteArrayOutputStream`,然后从`ByteArrayInputStream`中读取,从而创建一个新的对象。这种方式可以确保对象及其引用的所有对象都被复制,形成一个新的独立的实例...

    Java二进制序列化与克隆快速、高效、自动化.zip

    Maven从源代码构建快速入门输入输出输出输入字节缓冲区不安全的缓冲区可变长度编码分块编码缓冲性能...对象创建实例化策略覆盖创建最后课程闭包压缩和加密实现序列化器序列化器参考嵌套序列化程序Kryo异常堆栈大小接受...

    KryoJava序列化和克隆框架具有快速高效自动的特点

    6. **串行化与反串行化的API**:Kryo提供了简洁易用的API,使得开发者可以轻松地将对象序列化到字节数组、输入/输出流或者文件中,并且反序列化回来。 7. **兼容性**:Kryo虽然不是Java标准的序列化机制,但它能很...

    Java对象序列化

    3. **对象克隆**:通过序列化和反序列化实现对象的深度克隆。 4. **缓存机制**:将对象状态存储到磁盘或内存中,以提高性能。 #### 三、序列化实现机制 Java提供了两种主要的序列化方式: 1. **标准序列化**(`...

    关于Java对象序列化您不知道的5件事Java开发Java

    Java对象序列化是Java开发中的一个重要概念,它允许我们将Java对象转换为字节流,以便存储、传输或在不同时间点恢复。以下是五个可能不为人知的关于Java对象序列化的知识点,这些知识点对于深入理解Java开发至关重要...

    java序列化原理与算法

    2. **对象持久化**:为了将内存中的对象状态保存到磁盘上,以备后续使用,也需要将对象序列化。 3. **对象复制**:在某些情况下,需要创建对象的精确副本,序列化是实现这一目的的有效手段之一。 #### Java序列化的...

    序列化与持久化相同点跟不同点

    5. **对象克隆:** 可以通过序列化和反序列化实现对象的深度复制。 #### 三、序列化与持久化的相似之处 尽管序列化和持久化在本质上有所区别,但它们之间的相似之处也非常明显: 1. **数据转换:** 无论是序列化...

    java中对象的序列化与反序列化深入讲解

    Java中的对象序列化和反序列化是Java标准库提供的用于持久化对象状态的重要特性。对象序列化是指将Java对象转换为字节序列的过程,而反序列化则是将这些字节序列恢复为原始对象的过程。这一过程对于数据的存储、网络...

    clone 深度克隆对象

    实现深度克隆可以采用实现Cloneable接口并重写clone(),或者利用序列化和反序列化技术,具体选择取决于应用场景和性能需求。在实际项目中,应根据具体情况权衡效率和安全性,合理选择克隆策略。

    对象的写入与读取。将一个类的对象(例如:Calendar)写入到文件,然后顺序读出该对象,并验证读出的对象是否原始对象的克隆。

    1. **对象序列化**:对象序列化是将对象的状态信息转换成字节流的过程,以便存储到磁盘或者通过网络进行传输。在Java中,如果一个类想要支持序列化,它需要实现`java.io.Serializable`接口。在这个例子中,`Calendar...

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

    Java编程语言中,对象的创建和管理涉及到一系列...总结来说,Java对象的生命周期涉及类加载、初始化,以及对象的创建、克隆、序列化和反序列化等步骤,每一步都可能需要特定的处理和优化,以满足不同的需求和安全考虑。

    java 对象克隆

    二、实现克隆的方式 1. 实现Cloneable接口 Java中的Object类提供了一个`clone()`方法,但默认情况下,调用这个方法会抛出`CloneNotSupportedException`。为了使对象能够被克隆,我们需要让该类实现`Cloneable`接口。...

    java序列化

    ### Java对象序列化详解 #### 一、Java对象序列化概念 Java平台提供了一种机制,使得开发人员能够在内存中创建可复用的对象。通常情况下,这些对象的存在依赖于JVM(Java虚拟机)的运行状态,即一旦JVM停止运行,...

    Java对象的深克隆与浅克隆详解.zip(wcb2003)

    实现深克隆的方法通常需要自定义序列化和反序列化过程,因为Java的标准`clone()`方法不支持深克隆。可以使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`来实现: ```java public class MyClass ...

    如何进行Java对象的克隆.pdf

    一个类要实现克隆必须重写 Object 类的 clone() 方法,并且要实现 Cloneable 接口。 例如,我们可以创建一个 Person 类,该类有一个 name 属性,并实现了 Cloneable 接口。在 clone() 方法中,我们可以创建一个新的...

    java深度克隆

    3. **安全性问题**:使用序列化实现深度克隆可能会存在安全风险,例如反序列化恶意构造的数据可能导致代码执行等安全漏洞。 4. **实现限制**:只有实现了`Serializable`接口的类才能被正确地序列化和反序列化。 ###...

Global site tag (gtag.js) - Google Analytics