对象序列化.ppt
文本预览下载声明
LOGO LOGO LOGO 对象序列化 ID:SCSJ002-J2SE 对象序列化 描述对象序列化的目标 编程实现对象序列化 编程实现序列化的对象在网络上的传输 掌握Serializable和Externalizable接口 使用transient关键字保护数据 2011-05-03 * 对象系列化概述(案例14-1) 目标:将对象保存到磁盘或者在网络中传递 通过对象系列化,可以将对象保存在磁盘或网络中 为了实现对象系列化,对应的类必须实现下面的两种接口之一: Serializable Externalizable 对象序列化 2011-05-03 * 将对象保存到磁盘文件(案例14-2) 通过java.io.ObjectOutputStream可以将对象输出到磁盘文件、网络等设备 调用这个类的writeObject()方法,可以向特定的文件或网络输出对象 writeObject()方法序列化指定的对象,并遍历该对象对其它对象的引用,递归的序列化所有被引用到的其它对象,从而建立一个完整的序列化流 对象序列化 2011-05-03 * 从磁盘读出保存的对象(案例14-3) 通过java.io.ObjectInputStream对象可以从磁盘文件中读出保存的对象(或从网络中读出传递的对象) 调用这个类的readObject()方法,从特定的设备读出对象 readObject()方法反序列化输入流中的对象,遍历该对象中所有对其它对象的引用,并递归的反序列化这些引用对象 readObject()方法返回的是Object对象,所以,需要对它进行必要的(向下)造型操作。 对象序列化 2011-05-03 * 在网络中传递对象(案例14-4) 建立一个Socket连接,在这个连接之间传递系列化后的对象 对象序列化 2011-05-03 * 定制对象系列化(案例14-5) 可以通过定制对象序列化改变默认的序列化机制 通过在可序列化的类中实现方法writeObject(ObjectOutputStream out)和readObject(ObjectInputStream in),可以实现定制 对象序列化 2011-05-03 * transient关键字保护数据(案例14-6、-7) 通过在属性前面加上transient关键字,限制属性写入到文件或网络中 还可以在未实现系列化接口的引用类型属性前面加上transient关键字,避免对此类属性进行递归系列化时出现java.io.NotSerializableException异常 对象序列化 2011-05-03 * 系列化的另一种方式(案例14-8) 可以让需要系列化的类实现Serializable接口的子接口Externalizable Externalizable接口表示实现该接口的类在序列化中由该类本身来控制信息的写出和读入。 Externalizable接口定义: public interface Externalizable extends Serializable{ public void writeExternal(ObjectOutput out) throws IOException; public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;} 对象序列化 2011-05-03 * 系列化的另一种方式(续) 步骤: 实现Externalizable接口 实现readExternal()/writeExternal()方法 需要一个不带参数的构造器(是否需要显式定义根据类是否有定义构造器而定) 2011-05-03 * 可被系列化的内容 什么被序列化 属性(包括基本数据类型、数组、对其它对象的引用) 类名 什么不被序列化 static的属性 方法 加了transient修饰符的属性 2011-05-03 * LOGO LOGO LOGO
显示全部