Java IO: 序列化與ObjectInputStream、ObjectOutputStream

喝水會長肉 發表於 2021-11-28
Java

本小節會簡要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream。

Serializable

如果你希望類能夠序列化和反序列化,必須實現Serializable介面,就像所展示的ObjectInputStream和ObjectOutputStream例子一樣。

物件序列化本身就是一個主題。Java IO系列教程主要關注流、reader和writer,所以我不會深入探討物件序列化的細節。並且,目前在網上已經有很多文章探討了物件序列化,我將給出幾個深入分析的資料連結,不再贅述。連結如下:

http://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中,然後就可以把物件寫入到該輸出流中了。程式碼如下:


//java學習交流:737251827  進入可領取學習資源及對十年開發經驗大佬提問,免費解答!

ObjectOutputStream output = new ObjectOutputStream ( new FileOutputStream ( "object.data" ) ) ;

MyClass object = new MyClass ( ) ;  output . writeObject (object ) ; //etc.

output . close ( ) ;

例子中序列化的物件object現在可以從ObjectInputStream中讀取了。

同樣,在你序列化和反序列化一個物件之前,該物件的類必須實現了java.io.Serializable介面。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2844479/,如需轉載,請註明出處,否則將追究法律責任。