官方解釋:java
ObjectOutputStream 將 Java 對象的基本數據類型和圖形寫入 OutputStream。可使用 ObjectInputStream 讀取(重構)對象。經過使用流中的文件能夠實現對象的持久存儲。若是流是網絡套接字流,則能夠在另外一臺主機上或另外一個進程中重構對象。數組
只能將支持 java.io.Serializable 接口的對象寫入流中。每一個 serializable 對象的類都被編碼,編碼內容包括類名和類簽名、對象的字段值和數組值,以及從初始對象中引用的其餘全部對象的閉包。安全
ObjectInputStream 對之前使用 ObjectOutputStream 寫入的基本數據和對象進行反序列化。網絡
ObjectOutputStream 和 ObjectInputStream 分別與 FileOutputStream 和 FileInputStream 一塊兒使用時,能夠爲應用程序提供對對象圖形的持久性存儲。ObjectInputStream 用於恢復那些之前序列化的對象。其餘用途包括使用套接字流在主機之間傳遞對象,或者用於編組和解組遠程通訊系統中的實參和形參。閉包
ObjectInputStream 確保從流建立的圖形中全部對象的類型與 Java 虛擬機中的顯示的類相匹配。使用標準機制按需加載類。編碼
只有支持 java.io.Serializable 或 java.io.Externalizable 接口的對象才能從流讀取。spa
readObject
方法用於從流讀取對象。應該使用 Java 的安全強制轉換來獲取所需的類型。在 Java 中,字符串和數組都是對象,因此在序列化期間將其視爲對象。讀取時,須要將其強制轉換爲指望的類型。code
歸納爲 ObjectInputStream和ObjectInputStream類建立的對象被稱爲對象輸入流和對象輸出流。對象
知識儲備:接口
使用對象流寫入或讀入對象時,要保證對象是序列化的。這是爲了保證能把對象寫入到文件,並能再把對象讀回到程序中的緣故。一個類若是實現了Serializable接口,那麼這個類建立的對象就是所謂序列化的對象。所謂「對象序列化」: 簡 單一句話:使用它能夠象存儲文本或者數字同樣簡單的存儲對象。一個應用是,程序在執行過程當中忽然遇到短電或者其餘的故障致使程序終止,那麼對象當前的工做 狀態也就會丟失,這對於有些應用來講是可怕的。用對象序列化就能夠解決這個問題,由於它能夠將對象的所有內容保存於磁盤的文件,這樣對象執行狀態也就被存 儲了,到須要時還能夠將其從文件中按原樣再讀取出來,這樣就解決了數據丟失問題。對象序列化能夠簡單這麼實現:爲須要被序列化的對象實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流
ObjectInputStream和ObjectOutputStream是2個處理流,屬於包裝類,用於封裝其餘的流對象,爲被封裝的流對象提供額外的功能。它們能夠從底層輸入流中讀取對象類型的數據和將對象類型的數據寫入到底層輸出流。
將對象中全部成員變量的取值保存起來就等於保存了該對象,將對象中全部成員變量的取值還原就相等於讀取了該對象。
ObjectInputStream和ObjectOutputStream類所讀寫的對象必須實現了Serializable接口,這牽扯到了對象的序列化問題,請參考其餘資料瞭解對象的序列化。
將ObjetInputStream、ObjectOutputStream和FileInputStream、FileOutputStream結合使 用,能夠將對象信息存儲在磁盤上,完成對象的持久化存儲。也能夠經過ObjectOutputStream向網路中寫對象類型的數據,並經過 ObjectInputStream從網絡中讀取對象類型的信息。
從ObjectInputStream中讀取數據的順序必須與向ObjectOutputStream中寫入數據的順序相同,不然沒法讀取到正確的數據。