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); } }