JavaBean涉及的两个重要类
JavaBean对象和所有的对象一样,就其本质来说是动态变化的,若想使JavaBean对象在网络移动或把对象保存到永久介质中,必须把对象序列化 (Serialization)。对象序列化把对象的特征值按一定的顺序线性化排列。人们经常看到“持久性”一词与“序列化“联系在一起,持久性 (Persistence)是指使对象在硬盘上永久保存,对象的持久性是通过对象序列化来实现。反之。由序列化的对象的特征值重新构造该对象叫反序列化。 一个对象从一个网络结点传送到另一个结点,对象在发送的结点上需序列化,在接收对象的结点上需反序列化。
1. Serializable接口
Java提供了支持对象序列化的类和接口在java.io包中,Serializable接口是访问和运行持久性对象的最快的方式,若一个类对象要成为序 列化性对象,该对象类只需实现Serializable接口,就可以了。Serializable接口标识着一个对象是可序列化。在大多数情况下,要使一 个类对象序列化,只需要简单的在类声明中加入“implements Serializable”就可以了。例如
public class abc implements Serializable
{//……}
每一个JavaBean都应该是可序列化的,这就意味着,在大多数情况下需实现 Serializable接口。下图3-5说明了如何保存对象的标识和其特征值信息。保存的对象是例3-1的JavaBeanExaml类的对象 javaBeanExam1。
2. ObjectInputStream和ObjectOutputStream类
java.io包中提供了几个类,它们实现了对象输入输出接口,如ObjectInputStream和ObjectOutputStream类,下面 我们举例说
明这两个类如何对持久性对象进行操作的。
例3-7 利用ObjectOutputStream将例4-1中定义的的JavaBeanExaml类的对象写入到文件去。
package bean;
import java.io.*;
import java.beans.Beans;
public class BeanOut {
public Beanout() {
}
public static void main(String arg[])
{
try {
FileOutputStream fos = new FileOutputStream("bean.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
JavaBeanExaml javaBean1=new JavaBeanExaml();
javaBean1.setIAtrib (5);
oos.writeObject(javaBean1);
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
例3-8 将例3-7写入的对象读出来。这是序列化的逆过程。
package bean;
import java.io.*;
import java.beans.Beans;
public class beanin {
public beanin() {
}
public static void main(String arg[])
{
try {
FileInputStream fis = new FileInputStream("bean.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
JavaBeanExaml javaBean1=(JavaBeanExaml)ois.readObject();
System.out.println(javaBean1.getIAtrib ());
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
最后程序运行,输出的结果是 5 ,这说明读入的对象所保存的特征值,的确在保存前设置的整数值 5。
java的序列化机制为把对象输入输出带来方便。在上面的例子中,JavaBeanExaml对象不必知道如何将自己写入一个文件中,只需要简单的实现 Serializable接口,Java就会将所有的JavaBeanExaml bean的对象特征记录下来。