最新IBM水货笔记本价格,详细点击进入

查看完整版本: J2SE中的序列化的认识

风舞残阳 2008-4-1 11:22

J2SE中的序列化的认识

java中处处体现着简单的[wiki]程序[/wiki]设计风格,序列化作为最常用的功能之一,在java中的设计尤为“简单”。在ObjectInputStream和ObjectOutputStream的帮助下,我们可以轻松的实现序列化。

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

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

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

  packageStream;

  /**

  *@authorfavoyang

  */

  importjava.io.*;

  publicclassSerialimplementsSerializable{
  intcompany_id;
  Stringcompany_addr;
  booleancompany_flag;
  publicSerial(){}//不同于c++,没有也可以
  publicSerial(intcompany_id,Stringcompany_addr,booleancompany_flag){
  this.company_id=company_id;
  this.company_addr=company_addr;
  this.company_flag=company_flag;
  }

  publicstaticvoidmain(String[]args){
  Serialserial1=newSerial(752,"dayerstreet#5building02-287",false);//构造一个新的对象
  FileInputStreamin=null;
  FileOutputStreamout=null;
  ObjectInputStreamoin=null;
  ObjectOutputStreamoout=null;

  try{
   out=newFileOutputStream("5.txt");
   oout=newObjectOutputStream(out);
   serial1.serialize(oout);//序列化
   oout.close();
   oout=null;
   in=newFileInputStream("5.txt");
   oin=newObjectInputStream(in);
   Serialserial2=Serial.deserialize(oin);//反序列化
   System.out.println(serial2);//打印结果
  }catch(Exceptionex){
   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(IOExceptionex1){
    ex1.printStackTrace();
   }
  }
  }

  /**
  *deserialize
  */

  publicstaticSerialdeserialize(ObjectInputStreamoin)throwsException{
  Serials=(Serial)oin.readObject();
  returns;
  }

  publicStringtoString(){
  return"DATA:"+company_id+""+company_addr+""+company_flag;
  }

  /**
  *serialize
  */

  publicvoidserialize(ObjectOutputStreamoout)throwsException{
  oout.writeObject(this);
  }
  }

  运行结果:

  DATA:752dayerstreet#5building02-287false
  
  正确打印了结果。
页: [1]
查看完整版本: J2SE中的序列化的认识