文章插图
对象的串行化(Serialization)
一、串行化的概念和目的
1.什么是串行化
对象的寿命通常随着生成该对象的程序的终止而终止 。有时候 , 可能需要将对象的状态保存下来 , 在需要时再将对象恢复 。我们把对象的这种能记录自己的状态以便将来再生的能力 。叫作对象的持续性(persistence) 。对象通过写出描述自己状态的数值来记录自己 , 这个过程叫对象的串行化(Serialization)。串行化的主要任务是写出对象实例变量的数值 。如果交量是另一对象的引用 , 则引用的对象也要串行化 。这个过程是递归的 , 串行化可能要涉及一个复杂树结构的单行化 , 包括原有对象、对象的对象、对象的对象的对象等等 。对象所有权的层次结构称为图表(graph) 。
2.串行化的目的
Java对象的单行化的目标是为Java的运行环境提供一组特性 , 如下所示:
1)尽量保持对象串行化的简单扼要 , 但要提供一种途径使其可根据开发者的要求进行扩展或定制 。
2)串行化机制应严格遵守Java的对象模型。对象的串行化状态中应该存有所有的关于种类的安全特性的信息 。
3)对象的串行化机制应支持Java的对象持续性 。
4)对象的串行化机制应有足够的 可扩展能力以支持对象的远程方法调用(RMI) 。
5)对象串行化应允许对象定义自身 的格式即其自身的数据流表示形式 , 可外部化接口来完成这项功能 。
二、串行化方法
从JDK1.1开始 , Java语言提供了对象串行化机制 , 在java.io包中 , 接口Serialization用来作为实现对象串行化的工具 , 只有实现了Serialization的类的对象才可以被串行化 。
Serializable接口中没有任何的方法 。当一个类声明要实现Serializable接口时 , 只是表明该类参加串行化协议 , 而不需要实现任何特殊的方法 。下面我们通过实例介绍如何对对象进行串行化 。
1.定义一个可串行化对象
一个类 , 如果要使其对象可以被串行化 , 必须实现Serializable接口 。我们定义一个类Student如下:
2.构造对象的输入/输出流
要串行化一个对象 , 必须与一定的对象输出/输入流联系起来 , 通过对象输出流将对象状态保存下来 , 再通过对象输入流将对象状态恢复 。
java.io包中 , 提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。在ObjectInputStream 中用readObject()方法可以直接读取一个对象 , ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中 。
运行结果如下:
Student Info:
ID:981036
Name:LiuMing
Age:18
Dep:CSD
在这个例子中 , 我们首先定义了一个类Student , 实现了Serializable接口 , 然后通过对象输出流的writeObject()方法将Student对象保存到文件 data.ser中。之后 , 通过对家输入流的readObjcet()方法从文件data.ser中读出保存下来的Student对象。从运行结果可以看到 , 通过串行化机制 , 可以正确地保存和恢复对象的状态 。
三、串行化的注意事项
1.串行化能保存的元素
串行化只能保存对象的非静态成员交量 , 不能保存任何的成员方法和静态的成员变量 , 而且串行化保存的只是变量的值 , 对于变量的任何修饰符都不能保存 。
推荐阅读
- 加湿器里面放柠檬片会使人咳嗽吗?
- 加湿器里面放柠檬片会怎么样
- 加湿器里面可以放柠檬片吗?
- 手机内存里面的sdcard是什么文件
- 韩剧惊艳的她里面俞喃希演过哪些韩剧
- 水管里面有青苔怎么去除
- 微信里面的淘宝连接怎么转淘口令
- java如何实现把一个大图片压缩到指定大小的图片且长宽比不变
- 你觉得陈赫在《瞄准》里面的演技如何?
- 生物冰袋里面是什么? 一般生物冰袋里面是什么