`
flyingis
  • 浏览: 290764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java I/O中的对象序列化

阅读更多

<o:p>作者:Flyingis

      Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象。利用对象的序列化,可以实现轻量级持久性,这意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间。通过将一个序列化对象写入磁盘,然后在重新调用程序时恢复该对象,就能够实现持久性的效果。JDOHibernate等中间件为我们提供了更规范、完善的持久化机制,这里所述只是最基本的基于文件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中取得数据恢复过来的。对象序列化是面向字节的,因此采用InputStreamOutputStream层次结构。<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>

分享到:
评论
1 楼 viekie 2009-05-25  
一直都很关注你的gis的文章

相关推荐

    java深度历险 InfoQ中文站

    InfoQ中文站 1、java字节码操作 2、java类的加载、链接和初始化 3、java线程 4、java垃圾回收机制与引用类型 5、java泛型 6、java注解 7、java反射与动态代理 8、javaI/O 9、java安全 10、java对象序列化与RMI

    JAVA_API1.6文档(中文)

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...

    java深度历险

    java字节码 java类加载 java线程 java垃圾回收 java泛型 java注解 java反射与动态代理 javaI/O java安全 java对象序列化

    java名词汇总说明文档

    序列化(Serializable) 将对象写到流中并将其读回的过程 接口(interface) 只声明方法而不实现,数据成员必须初始化且不能更改的特殊类 抽象类(abstract class) 仅定义了方法的部分实现,而留待扩展类去提供这些方法...

    JavaAPI1.6中文chm文档 part1

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...

    Java 1.6 API 中文 New

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口...

    java-io-guide:Java中的Java IO(输入和输出流)指南

    文件序列化示例 如何用Java将对象写入文件 如何从文件读取对象 文件压缩示例 用Java压缩ZIP格式的文件 从Java中的ZIP文件解压缩文件 目录 目录操作示例列表。 获取当前工作目录 建立目录 删除目录 复制目录 遍历...

    java jdk-api-1.6 中文 chmd

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...

    java api最新7.0

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口...

    JavaAPI中文chm文档 part2

    javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的...

    重要的Java概念::rocket:完整的Java-从A到Z║:books:Java的所有基本概念和重要概念的注释和程序-OOPS,数据结构,算法,设计模式和开发

    学习Java编程 此仓库包含与以下概念有关的Java程序: Java基础知识 Java面向对象编程 Java Collections框架 ...[3] Java-文件,I / O,序列化和联网[完成] 注意事项[有用的信息]: 程式 : 数据解析(CS

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    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 概念介绍 ...

    软件工程师Java班课程

    J2SE平台Java程序设计 Java AWT图形界面程序开发,Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,高级I/O流和文件编程,多线程程序设计 熟练掌握J2SE平台的Java程序设计技能 ...

    一个简易版本的QQ聊天程序

    这个简单的QQ程序是用java开发的,上面实现了QQ的群聊,私聊,离线,隐身的简单功能,主要涉及到的java知识有:图形界面,I/O操作,多线程,网络编程,对象序列化,集合类,读写文件等。上面我比较详细的写了一些...

    java维基源码-java-extra-lectures:有关Java额外讲座的源代码-不在Wiki书的一章中

    使用序列化缓存对象 类加载和实例初始化 数据结构-集合和地图 Java枚举- Java 8流和Lambdas- Jar文件- Java I / O(java.io类)- Java可选- Systembolaget产品的JDBC和Servlet示例- Java网络- Java Swing-GUI编程- ...

    Java SE实践教程 源代码 下载

    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 概念介绍 ...

Global site tag (gtag.js) - Google Analytics