此示例演示如何使用java.io.ObjectOutputStream和java.io.ObjectInputStream类来写入和读取序列化的对象。我们将创建一个Book实现java.io.Serializable接口。本Book类有接受所有的书详细信息的构造。
要将对象写入流,我们调用ObjectOutputStream类的writeObject()方法,并将序列化的对象传递给它。为了读回对象,我们调用ObjectInputStream类的readObject()方法。
package org.nhooo.example.io; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class ObjectStoreExample { public static void main(String[] args) { // 创建FileOutputStream和ObjectOutputStream的实例。 try (FileOutputStream fos = new FileOutputStream("books.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos)) { //创建一个Book实例。然后将这本书对象存储在 // 文件。 Book book = new Book("0-07-222565-3", "Hacking Exposed J2EE & Java", "Art Taylor, Brian Buege, Randy Layman"); // 通过使用ObjectOutputStream的writeObject()方法,我们可以 // 使book对象持久保存在books.dat文件中。 oos.writeObject(book); } catch (IOException e) { e.printStackTrace(); } //我们已经保存了这本书。现在该回读并显示它了 // 其详细信息。 try (FileInputStream fis = new FileInputStream("books.dat"); ObjectInputStream ois = new ObjectInputStream(fis)) { // 要读取Book对象,请使用ObjectInputStream.readObject()方法。 // 此方法返回对象类型数据,因此我们需要将其投射回 // 起源类,书籍类。 Book book = (Book) ois.readObject(); System.out.println(book.toString()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } // 书籍对象将使用ObjectOutputStream类保存并被读取 //返回使用ObjectInputStream类。使对象可以写入 // 流,我们需要使该类实现Serializable接口。 class Book implements Serializable { private String isbn; private String title; private String author; public Book(String isbn, String title, String author) { this.isbn = isbn; this.title = title; this.author = author; } @Override public String toString() { return "Book{" + "isbn='" + isbn + '\'' + ", title='" + title + '\'' + ", author='" + author + '\'' + '}'; } }
上面的代码片段的结果是:
Book{isbn='0-07-222565-3', title='Hacking Exposed J2EE & Java', author='Art Taylor, Brian Buege, Randy Layman'}