想要查看此教程的目錄請點擊:Java IO教程目錄貼地址
ObjectInputStream(java.io.ObjectInputStream)可以從InputStream讀取Java對象來代替原始的字節。用ObjectInputStream來包裝InputStream然后就可以從它里面直接讀取對象。當然,讀取的字節必須是有效且可序列化的Java對象,否則就會讀取失敗。
一般情況下你會用ObjectInputStream讀取對象,用ObjectOutputStream寫對象(序列化)。稍后會給出相關的例子。
ObjectInputStream例子
下面是Java ObjectInputStream 例子:
ObjectInputStream objectInputStream =
new ObjectInputStream(new FileInputStream("object.data"));
MyClass object = (MyClass) objectInputStream.readObject();
//etc.
objectInputStream.close();
這個例子中你讀取的對象必須是 MyClass的實例,并且已經被序列化到了文件object.data中通過ObjectOutputStream。
在你序列化或反序列化之前,你必須已經實現了java.io.Serializable接口。更多的信息可以參考后面的文章 Java Serializable。
ObjectInputStream 和 ObjectOutputStream同時使用
在文章的開始我已經說要展示一個ObjectInputStream 和 ObjectOutputStream一起使用的例子,那么下面就是:
import java.io.*;
public class ObjectInputStreamExample {
public static class Person implements Serializable {
public String name = null;
public int age = 0;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectOutputStream objectOutputStream =
new ObjectOutputStream(new FileOutputStream("data/person.bin"));
Person person = new Person();
person.name = "Jakob Jenkov";
person.age = 40;
objectOutputStream.writeObject(person);
objectOutputStream.close();
ObjectInputStream objectInputStream =
new ObjectInputStream(new FileInputStream("data/person.bin"));
Person personRead = (Person) objectInputStream.readObject();
objectInputStream.close();
System.out.println(personRead.name);
System.out.println(personRead.age);
}
}
例子首先創建了一個ObjectOutputStream實例并把一個FileOutputStream傳入構造方法。然后創建了一個 Person 實例并將其寫到ObjectOutputStream,然后關閉流。
這個例子運行的結果就是:
Jakob Jenkov
40
關閉ObjectInputStream
關閉流的做法和上面文章中此處的內容幾乎一致,可以參考