《Java高级程序设计》课件——学习情境5 Java序列化机制.pptx
;一、应用场景
二、Java泛型的概念
三、Java对象实现序列化的步骤
四、Java实现反序列化的步骤;3;序列化常应用于以下场景
(1)永久性保存对象,保存对象的字节序列到本地文件或者数据库中;
(2)通过序列化以字节流的形式使对象在网络中进行传递和接收;
(3)通过序列化在进程间传递对象。
;二、Java序列化;Java序列化的几种方式;Java对象序列化机制;java.io.Serializable接口
java.io.Externalizable接口
ObjectOutput接口
ObjectInput接口
ObjectOutputStream类
ObjectInputStream类;Serializable接口,表示一个类的可序列化性由实现Serializable接口的类启用。未实现此接口的类的任何状态都不会序列化或反序列化。序列化接口没有方法或字段,仅用于标识可序列化的语义。;ObjectOutputStream类,代表对象输出流,它的writeObject(Objectobj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
ObjectInputStream类,代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个Java对象,并将其返回。;定义一个类,并实现Serializable或Externalizable接口。实现Serializable接口只要让Java类实现Serializable接口即可,无需实现任何方法。
使用ObjectOutputStream的writeObject(Objectobj)方法和ObjectInputStream的readObject()方法,对序列化的Java对象进行读写为字节输出流和输入流。;三、Java对象实现序列化的步骤;Employeeemployee=newEmployee();;Filefile=newFile(“物理文件”);;第四步,创建文件输出流;第五步,创建对象输出流,负责将对象写入字节流;第六步,通过对象输出流写入对象;第七步,关闭流;四、Java实现反序列化的步骤;Employeeemployee=newEmployee();;第三步,创建逻辑文件
Filefile=newFile(“物理文件”);//构造函数
第四步,创建文件输入流
FileInputStreamfis=newFileInputStream(file);;第五步,创建对象输出流,负责将对象写入字节流
ObjectInputStreamiis=newObjectInputStream(fis);
第六步,通过对象输出流读出对象并处理该对象
employee=iis.readObject(employee);
System.out.println(employee);;第七步,关闭流
iis.close();
fis.close();
;小结;;一、任务描述
二、任务分析、设计
三、任务实施
四、运行结果;27;二、任务分析、设计;其类图如图5-1所示。;三、任务实施;publicclassAddressimplementsSerializable{
privatestaticfinallongserialVersionUID=4983187287403615604L;
…
};实现Serializable接口非常简单,只要让Java类实现Serializable接口即可,无需实现任何方法。
一个类一旦实现了Serializable接口,那么该类的对象就是可序列化的。;第二步,创建员工类Employee;Employee实现了Serializable接口,那么该类的对象就是可序列化的。
该类引用了Address地址对象,地址类也是可序列化的。;第三步创建测试类;第四步新建员工对象;第五步,将对象序列化后写入文件;首先指定物理文件到逻辑文件
Filefile=newFile(d:\\employee23.dat);
然后创建文件输出流到逻辑文件
FileOutputStreamfos=newFileOutputStream(file);
再创建对象输出流到文件输出流
ObjectOutputStreamoos=newObjectOutputStream(fos);
最后通过对象输出流完成写操作
oos.writeObject(employee);;oos.flush();
oos.close();
fos.close();;2反序列化对象从磁盘上读出;首先,创建反序列化测试类;第一步从