Top
首页 > 老文章 > 正文

浅谈J2SE中的序列化问题的感性认识

Java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在Java中的设计尤为“简单”。在ObjectInputStream和ObjectOutputStream的帮助下,我们可以轻松的实现序列化
发布时间:2005-08-03 16:09        来源:        作者:JAVA中文站
Java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在Java中的设计尤为“简单”。在ObjectInputStream和ObjectOutputStream的帮助下,我们可以轻松的实现序列化。

只要我们的class实现了Java.io.Serializable接口,就可以利用ObjectOutputStream的writeObject()方法将一个对象序列化;利用ObjectInputStream的readObject()方法,可以返回读出的object对象。Serializable接口不需要我们实现任何方法。

以下是一个例子,它能给我们一个感性的认识:

Serial实现了就Java.io.Serializable接口,是需要序列化的类。我们首先构造一个Serial的对象serial1然后将其保存(序列化)在一个文件中,而后再将其读出(反序列化),并打印其内容。

package Stream;

/**

* @author favo yang

*/

import java.io.*;

public class Serial 
implements Serializable
{
 int company_id;
 String company_addr;
 boolean company_flag;
 public Serial(){}
//不同于c++,没有也可以
 public Serial(int company_id,
String company_addr,
boolean company_flag) 
{
  this.company_id=company_id;
  this.company_addr=company_addr;
  this.company_flag=company_flag;
 }

 public static void main(String[] args)
{
  Serial serial1 = 
new Serial(752,"dayer street 
#5 building 02-287",false);
//构造一个新的对象
  FileInputStream in=null;
  FileOutputStream out=null;
  ObjectInputStream oin=null;
  ObjectOutputStream oout=null;

  try {
   out = new FileOutputStream("5.txt");
   oout = new ObjectOutputStream(out);
   serial1.serialize(oout);
//序列化
   oout.close();
   oout=null;
   in = new FileInputStream("5.txt");
   oin = new ObjectInputStream(in);
   Serial serial2 = 
Serial.deserialize(oin);
//反序列化
   System.out.println(serial2);
//打印结果
  } catch (Exception ex)
{
   ex.printStackTrace();
  } finally{
   try {
    if (in != null) 
{
     in.close();
    }
    if (oin != null) 
{
     oin.close();
    }
    if (out != null)
{
     out.close();
    }
    if (oout != null)
{
     oout.close();
    }
   } catch (IOException ex1) 
{
    ex1.printStackTrace();
   }
  }
 }

 /**
 * deserialize
 */

 public static Serial deserialize
(ObjectInputStream oin) 
throws Exception
{
  Serial s=(Serial)oin.readObject();
  return s;
 }

 public String toString() 
{
  return "DATA: "+company_id+" 
"+company_addr+" "+company_flag;
 }

 /**
  * serialize
 */

 public void serialize
(ObjectOutputStream oout) 
throws Exception
{
  oout.writeObject(this);
 }
}
运行结果:
DATA: 752 dayer street 
#5 building 02-287 false
(T117)
加载更多

专题访谈

合作站点
stat