基本信息
文件名称:面向对象-教案(第30讲).doc
文件大小:63.5 KB
总页数:4 页
更新时间:2025-06-13
总字数:约3.44千字
文档摘要

PAGE5

《面向对象程序设计》教案

第30讲

教学对象

计算机科学技术专业

授课内容

11.6对象序列化

编程实践

课程标准

教学目标

(一)知识目标

1.理解对象序列化和反序列化的概念

2.灵活应用字节流和字符流

(二)能力目标

1.能够熟练使用字节流和字符流进行文件的读写操作

2.能够熟练使用File类完成文件和目录的操作

教学方法

采用讲授法、演示法、讨论法、案例教学。

学时及分配(第1学时50分钟)

课堂讲授30分钟

课堂练习20分钟

11.6对象序列化

学时及分配(第2学时50分钟)

课堂讲授20分钟

课堂练习30分钟

编程实践

知识点分析

重点:

字符流和字节流的基本操作

File类的使用

难点:

字符缓冲流和字节缓冲流

序列化和反序列化

教学过程设计

内容

方式

问题导入

有时需要将对象持久化到永久存储设备中,以便保存对象的状态供以后检索。Java通过对象序列化(objectserialization)支持这一点。要序列化对象,即将其保存到永久存储设备中,可以使用ObjectOutputStream。要反序列化(deserialize)对象,即检索保存的对象,可使用ObjectInputStream。

内容要点

11.6.1对象序列化与对象流

将程序中的对象输出到外部设备(如磁盘、网络)中,称为对象序列化(serialization)。反之,从外部设备将对象读入程序中称为对象反序列化(deserialization)。一个类的对象要实现对象序列化,必须实现java.io.Serializable接口,该接口的定义如下。

publicinterfaceSerializable{}

Serializable接口只是标识性接口,其中没有定义任何方法。一个类的对象要序列化,除了必须实现Serializable接口外,还需要创建对象输出流和对象输入流,然后,通过对象输出流将对象状态保存下来,通过对象输入流恢复对象的状态。要序列化的类如果没有实现该接口,在序列化时将抛出java.io.NotSerializableException异常。

在java.io包中定义了两个类ObjectInputStream和ObjectOutputStream,分别称为对象输入流和对象输出流。ObjectInputStream类继承了InputStream类,实现了ObjectInput接口,而ObjectInput接口又继承了DataInput接口。ObjectOutputStream类继承了OutputStream类,实现了ObjectOutput接口,而ObjectOutput接口又继承了DataOutput接口。

11.6.2向ObjectOutputStream中写对象

若将对象写到外部设备需要建立ObjectOutputStream类的对象,构造方法为:

publicObjectOutputStream(OutputStreamout)

参数out为一个字节输出流对象。创建了对象输出流后,就可以调用它的writeObject()方法将一个对象写入流中,该方法格式为:

publicfinalvoidwriteObject(Objectobj)throwsIOException

若写入的对象不是可序列化的,该方法会抛出NotSerializableException异常。由于ObjectOutputStream类实现了DataOutput接口,该接口中定义多个方法用来写入基本数据类型,如writeInt()、writeFloat()及writeDouble()等,可以使用这些方法向对象输出流中写入基本数据类型。

下面代码将一些数据和对象写到对象输出流中。

varfos=newFileOutputStream(data.ser);

varoop=newObjectOutputStream(fos);

可向对象流中写基本类型和各种对象oos.writeInt(2022);

可向对象流中写基本类型和各种对象

oos.writeObject(你好);

oos.writeObject(LocalDate.now());

ObjectOutputStream必须建立在另一个字节流上,该例是建立在FileOutputStream上的。然后向文件中写入一个整数、字符串“你好”和一个LocalDate对象。

11.6.3从ObjectInputStream中读对象

若要从外部设备上读取对象,