我們在學習JavaSE的時候學習過ObjectInputStream
和ObjectOutputStream
,當時是覺得只要一個對象要寫入文件就必須要實現Serializable接口。其實這樣理解完全沒有問題。
一、問題引入
Java中為什么要實現序列化接口呢?我們來看下圖:
Java程序中要往磁盤中寫入一個數據,這個數據如果是一個普通字符串,那么沒有問題,所有機器都能正常識別字符串,即使需要轉成對應的字節,計算機也知道怎么將字符串轉成對應的字節(碼表),但是如果是一個Java對象那就麻煩了,磁盤并不知道你傳遞的是一個Java對象,換句話說,磁盤不知道按照什么格式把Java對象轉換成對應的字節。
相關視頻教程分享:java學習
我們知道Java對象本質上是一個class字節碼,磁盤并不知道怎么將這個字節碼寫入到磁盤中,按何種方式去寫,所以需要"標識"一下,告訴磁盤:“我是個Java對象,你要按這種方式寫入到磁盤中”,只不過"按這種方式寫入到磁盤"。因此實現Serializable接口只是標識一下"我是個Java對象"
如果你懂了上述文字的理解,也就不難懂下述圖了:
二、加深理解
Java 提供了一種對象序列化的機制。用一個字節序列可以表示一個對象,該字節序列包含該對象的數據、對象的類型和對象中存儲的屬性等信息。字節序列寫出到文件之后,相當于文件中持久保存了一個對象的信息。
反之,該字節序列還可以從文件中讀取回來,重構對象,對它進行反序列化。對象的數據、對象的類型和對象中存儲的數據信息,都可以用來在內存中創建對象。看圖理解序列化:
相關文章教程推薦:java入門程序