<o:p>作者:Flyingis
Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象。利用对象的序列化,可以实现轻量级持久性,这意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间。通过将一个序列化对象写入磁盘,然后在重新调用程序时恢复该对象,就能够实现持久性的效果。JDO、Hibernate等中间件为我们提供了更规范、完善的持久化机制,这里所述只是最基本的基于文件I/O的持久化。</o:p>
对象序列化主要是为了支持两种主要的特性,一是Java远程方法调用(RMI),另外一个是序列化Java Beans。<o:p></o:p>
1. 实现了Serializable接口的对象的序列化<o:p></o:p>
要序列化一个对象,首先要创建OutputStream对象,然后将其封装在一个ObjectOutputStream对象内。此时,调用writeObject()方法将对象序列化并发送给OutputStream。在反序列化时,需要将一个InputStream封装在ObjectInputStream内,然后调用readObject(),得到的结果是一个Object对象,需要进行转型得到最后所需的对象。需要注意的是,在对一个Serializable对象进行反序列化的过程中,没有调用任何构造器,包括缺省的构造器,整个对象都是通过从InputStream中取得数据恢复过来的。对象序列化是面向字节的,因此采用InputStream和OutputStream层次结构。<o:p></o:p>
2. 实现了Externalizable接口的对象的序列化<o:p></o:p>
Externalizable接口继承了Serializable接口,同时添加了writeExternal()和readExternal(),它们在序列化和反序列化过程中会被自动调用。出于安全的考虑,可以将需要序列化的对象在上述方法中显式处理,否则不用在上述两个方法内考虑。注意,对于实现了Serializable接口的对象,对象完全以它存储的二进制位为基础来构造,不调用构造器。而对于一个Externalizable对象,所有普通的缺省构造器都会被调用,然后调用readExternal()。<o:p></o:p>
3. transient关键字<o:p></o:p>
在某些情况下,有些特定的子对象不希望Java序列化机制自动保存与恢复,即使对象中的这些信息是private的,经过序列化处理,就可以通过读取文件或者拦截网络传输的方式来访问到它。实现了Externalizable接口的对象的writeExternal()方法可以对需要的对象进行显式的序列化,但是如果我们操作的是一个实现了Serializable接口的对象,就只能用transient关键字逐个字段的关闭序列化,只需要在字段定义前加上该关键字即可。<o:p></o:p>
4. 实现了Serializable接口的同时,提供两个方法<o:p></o:p>
private void writeObject(ObjectOutputStream stream) throws IOException<o:p></o:p>
private void readObject(ObjectInputStream stream) <o:p></o:p>
throws IOException, ClassNotFoundException<o:p></o:p>
这种方法使用起来比较混乱,仅仅提供了这样的一种功能,绝大多数情况下,使用前面三种方法就能满足需求。<o:p></o:p>
分享到:
相关推荐
InfoQ中文站 1、java字节码操作 2、java类的加载、链接和初始化 3、java线程 4、java垃圾回收机制与引用类型 5、java泛型 6、java注解 7、java反射与动态代理 8、javaI/O 9、java安全 10、java对象序列化与RMI
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...
java字节码 java类加载 java线程 java垃圾回收 java泛型 java注解 java反射与动态代理 javaI/O java安全 java对象序列化
序列化(Serializable) 将对象写到流中并将其读回的过程 接口(interface) 只声明方法而不实现,数据成员必须初始化且不能更改的特殊类 抽象类(abstract class) 仅定义了方法的部分实现,而留待扩展类去提供这些方法...
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口...
文件序列化示例 如何用Java将对象写入文件 如何从文件读取对象 文件压缩示例 用Java压缩ZIP格式的文件 从Java中的ZIP文件解压缩文件 目录 目录操作示例列表。 获取当前工作目录 建立目录 删除目录 复制目录 遍历...
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口...
javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...
学习Java编程 此仓库包含与以下概念有关的Java程序: Java基础知识 Java面向对象编程 Java Collections框架 ...[3] Java-文件,I / O,序列化和联网[完成] 注意事项[有用的信息]: 程式 : 数据解析(CS
9.1.4 对象XML序列化 227 9.2 练习 228 9.2.1 我的联系手册(JPA实现) 228 9.2.2 我的联系手册(JAXB实现) 238 9.3 小结 242 第10章 准备环球旅行——应用程序国际化 243 10.1 讲解 244 10.1.1 概念介绍 ...
J2SE平台Java程序设计 Java AWT图形界面程序开发,Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,高级I/O流和文件编程,多线程程序设计 熟练掌握J2SE平台的Java程序设计技能 ...
这个简单的QQ程序是用java开发的,上面实现了QQ的群聊,私聊,离线,隐身的简单功能,主要涉及到的java知识有:图形界面,I/O操作,多线程,网络编程,对象序列化,集合类,读写文件等。上面我比较详细的写了一些...
使用序列化缓存对象 类加载和实例初始化 数据结构-集合和地图 Java枚举- Java 8流和Lambdas- Jar文件- Java I / O(java.io类)- Java可选- Systembolaget产品的JDBC和Servlet示例- Java网络- Java Swing-GUI编程- ...
9.1.4 对象XML序列化 227 9.2 练习 228 9.2.1 我的联系手册(JPA实现) 228 9.2.2 我的联系手册(JAXB实现) 238 9.3 小结 242 第10章 准备环球旅行——应用程序国际化 243 10.1 讲解 244 10.1.1 概念介绍 ...