import java.io.*; |
/* |
* SerializableObject.java |
* |
* Created on 2006年8月23日, 上午11:26 |
* |
* 对象串行化 |
* 对象通过写出描述自己状态的数值来记录自己,这个过程叫做对象串行化。对象的寿命通 |
* 常是随着生成该对象的程序的终止而终止,在有些情况下,需要将对象的状态保存下来,然后 |
* 在必要的时候将对象恢复,值得注意的是,如果变量是另一个对象的引用,则引用的对象也要 |
* 串行化,串行化是一个递归的过程,可能会涉及到一个复杂树结构的串行化,比如包括原有对 |
* 象,对象的对象等。 |
* 在java.io包中,接口Serializable是实现对象串行化的工具,只有实现了Serializable |
* 的对象才可以被串行化。Serializable接口中没有任何的方法,当一个类声明实现Seriali- |
* zable接口时,只是表明该类遵循串行化协议,而不需要实现任何特殊的方法。 |
* 在进行对象串行化时,需要注意将串行化的对象和输入、输出流联系起来,首先通过对 |
* 象输出流将对象状态保存下来,然后通过对象输入流将对象状态恢复。 |
*/ |
class Book implements Serializable { |
String isbn; |
String name; |
int page; |
String type; |
public Book(String isbn, String name, int page, String type) { |
this .isbn = isbn; |
this .name = name; |
this .page = page; |
this .type = type; |
} |
} |
public class SerializableObject implements Serializable { |
public static void main(String[] args) throws IOException, |
ClassNotFoundException { |
Book bookObj = new Book( "7-02-016450-1" , "Java" , 218 , "programming" ); |
FileOutputStream fileOStream = new FileOutputStream( "temp.ser" ); |
ObjectOutputStream objOutStream = new ObjectOutputStream(fileOStream); |
try { |
objOutStream.writeObject(bookObj); |
objOutStream.close(); |
} catch (IOException e) { |
e.printStackTrace(); |
} |
bookObj = null ; |
FileInputStream fileInStream = new FileInputStream( "temp.ser" ); |
ObjectInputStream objInStream = new ObjectInputStream(fileInStream); |
try { |
bookObj = (Book) objInStream.readObject(); |
objInStream.close(); |
} catch (IOException e) { |
e.printStackTrace(); |
} |
System.out.println( "------------------------------------------------" ); |
System.out.println( "There are information about book:" ); |
System.out.println( "ISBN Number: " + bookObj.isbn); |
System.out.println( "Book Name: " + bookObj.name); |
System.out.println( "Book Page: " + bookObj.page); |
System.out.println( "Book Type: " + bookObj.type); |
} |
} |