风舞残阳 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
正确打印了结果。