Java 中 对 象 的 序 列 化 技 术

来源:互联网 发布:python 实时监控日志 编辑:程序博客网 时间:2024/05/16 23:50
Java 中 对 象 的 序 列 化 技 术

时间:2003-10-2 14:15:46 来源:天涯网 作者:杨少波 阅读672次
 
1、含义:将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
2、编程要求:只有实现Serializable接口的类对象才可以被序列化。 Serializable接口没有定义任何成员,它只用来说明某个类可以被序列化。
3、序列化的特点:
(1)如果某个类能够被序列化,其子类也可以被序列化。
(2)声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。
(3)相关的类和接口:在java.io包中提供如下涉及对象的序列化的类与接口ObjectOutput接口、ObjectOutputStream类、ObjectInput接口、
ObjectInputStream类
4、ObjectOutput接口和ObjectOutputStream类
(1)ObjectOutput接口:它继承DataOutput接口并且支持对象的序列化,其内的writeObject()方法实现存储一个对象。
(2) ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现将对象存储(调用ObjectOutput接口中的writeObject()方法)。
注意:
(1)也可以利用ObjectOutputStream类的对象写入其它基本类型的数据值。
(2)出错时将抛出IOException异常。
5、ObjectInput接口和ObjectInputStream类
(1)ObjectInput接口:它继承DataInput接口并且支持对象的序列化,其内的readObject()方法实现读取一个对象。
(2) ObjectInputStream类:它继承InputStream类并且实现ObjectInput接口。利用该类来实现将对象存储(调用ObjectInput接口中的readObject()方法)。
注意:
(1)也可以利用ObjectInputStream类的对象读取其它基本类型的数据值。
(2)出错时将抛出IOException异常。

6、对象的序列化用途:
  利用对象的序列化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。下面给出读写对象状态的源程序片段(完整的程序代码,在我们的Java培训课程中将会详细地讲解对象的序列化技术):
(1)保存对象的状态
FileOutputStream fos=null;
ObjectOutputStream oos=null;
FrameConfig configData=new FrameConfig(this); //FrameConfig类中包含有要保存的数据
try
{
fos=new FileOutputStream("config.dat");
oos=new ObjectOutputStream(fos);
oos.writeObject(configData);
oos.flush();
fos.close();
oos.close();
}
catch(IOException e)
{
}

(2)读取对象的状态
FrameConfig configData=null;
currentDir=System.getProperty("user.dir"); //获得程序当前的目录路径
try
{
FileInputStream fis=new FileInputStream("config.dat");
ObjectInputStream ois=new ObjectInputStream(fis);
configData=(FrameConfig)ois.readObject();
fis.close();
ois.close();
if(configData!=null)
{ //获得对象中的数据并保存在程序的变量中
currentDir=configData.currentDir;
WindowStyle=configData.WindowStyle;
topX=configData.topX;
topY=configData.topY;
windowWidth=configData.windowWidth;
windowHeight=configData.windowHeight;
}
else
{ //如果未能够正确地读出数据将采用缺省值
topX=0;
topY=0;
windowWidth=Toolkit.getDefaultToolkit().getScreenSize().width;
windowHeight=Toolkit.getDefaultToolkit().getScreenSize().height-25;
}
}
catch(IOException e)
{
}
catch(ClassNotFoundException e)
{
}

原创粉丝点击