32. Java IO: ObjectInputStream

想要查看此教程的目錄請點擊: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

關閉流的做法和上面文章中此處的內容幾乎一致,可以參考

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容