ObjectInputStream與ObjectOutputStream的做用是:對基本數據和對象進行序列化操做進行支持。其中ObjectInputStream對象提供對基本數據和對象對持久存儲,當咱們須要讀取這些存儲這些基本數據或對象時,能夠建立文件輸入流對應的ObjectInputStream,進而讀取這些基本數據或對象。 序列化有關的基礎知識: 1 須要序列化的類必須實現java.io.Serializable接口,不然會拋出NotSerializableException異常。 2 若是檢測到反序列化的類的serialVersionUID和對象二進制流的serialVersionUID不一樣,則會拋出異常。 3 Java序列化會將一個類中包含的引用中的全部的成員變量保存下來,因此裏面的引用類型也要實現java.io.Serializable的接口。 4 對於不用採用默認序列化或無需序列化的成員變量,能夠添加transient關鍵字,並非說添加了transient關鍵字就必定不能序列化。 5 每個類能夠實現readObject、writeObject等方法實現本身的序列化策略,即便是transient修飾的成員變量也能夠手動調用ObjectOutputStream的write*等方法,將成員變量序列化。 ObjectOutputStream 有關方法 1 public ObjectOutputStream(OutputStream out) throws IOException {} * 建立一個ObjectOutputStream去寫入指定的OutputStream,此構造函數將序列化流頭寫入底層流,調用者須要當即刷新流,以確保用於接收ObjectInputStreams的構造函數在讀取該頭時不會阻塞。 2 protected ObjectOutputStream() throws IOException, SecurityException {} * 爲徹底從新實現ObjectOutputStream的子類提供一種方法,使其沒必要分配僅由ObjectOutputStream的實現使用的私有數據 3 public void useProtocolVersion(int version) throws IOException {} * 指定在編寫流時使用的流協議版本 4 public final void writeObject(Object obj) throws IOException {} * 將指定的對象寫入ObjutoExtStudio流,對象的類、類的簽名、類及其全部超類型的非瞬態和非靜態字段的值均可以經過該方法寫入,重寫writeObject和readObject方法能夠將默認的序列號重寫,該對象引用的對象是經過傳遞方式編寫的,以便ObjectInputStream能夠重構等效的、完整的對象。