Java IO: 序列化與ObjectInputStream、ObjectOutputStream
本小節會簡要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream。
Serializable
如果你希望類能夠序列化和反序列化,必須實現Serializable接口,就像所展示的ObjectInputStream和ObjectOutputStream例子一樣。
對象序列化本身就是一個主題。Java IO係列教程主要關注流、reader和writer,所以我不會深入探討對象序列化的細節。並且,目前在網上已經有很多文章探討了對象序列化,我將給出幾個深入分析的資料鏈接,不再贅述。鏈接如下:
https://java.sun.com/developer/technicalArticles/Programming/serialization/
ObjectInputStream
ObjectInputStream能夠讓你從輸入流中讀取Java對象,而不需要每次讀取一個字節。你可以把InputStream包裝到ObjectInputStream中,然後就可以從中讀取對象了。代碼如下:
ObjectInputStream input = new ObjectInputStream(new FileInputStream("object.data")); MyClass object = (MyClass) input.readObject(); //etc. input.close();
在這個例子中,你讀取的對象必須是MyClass的一個實例,並且必須事先通過ObjectOutputStream序列化到“object.data”文件中。(譯者注:ObjectInputStream和ObjectOutputStream還有許多read和write方法,比如readInt、writeLong等等,詳細信息請查看官方文檔)
在你序列化和反序列化一個對象之前,該對象的類必須實現了java.io.Serializable接口。
ObjectOutputStream
ObjectOutputStream能夠讓你把對象寫入到輸出流中,而不需要每次寫入一個字節。你可以把OutputStream包裝到ObjectOutputStream中,然後就可以把對象寫入到該輸出流中了。代碼如下:
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("object.data")); MyClass object = new MyClass(); output.writeObject(object); //etc. output.close();
例子中序列化的對象object現在可以從ObjectInputStream中讀取了。
同樣,在你序列化和反序列化一個對象之前,該對象的類必須實現了java.io.Serializable接口。
最後更新:2017-05-23 11:03:06