所有的項目開發一定都有序列化的概念存在。
1.序列化的基本概念
對象序列化指的是:將內存中保存的對象變爲二進制數據流的形式進行傳輸,或者是將其保存在文本中。但是並不意味着所有類的對象都可以被序列化,嚴格來講,需要被序列化的類對象往往需要傳輸使用,同時這個類必須實現
java.io.Serializable接口。但是這個接口並沒有任何的方法定義,只是一個標識而已。
範例:定義可以被序列化對象的類
序列化對象時所需要保存的就是對象中的屬性,所以默認情況下對象的屬性將被轉爲二進制數據流存在。
2.序列化與反序列化
如果要想實現序列化與反序列化的對象操作,在java.io包中提供有兩個處理類:ObjectOutputStream、ObjectInputStream
首先來觀察這兩個類的定義結構及其各自的構造方法
範例:實現對象序列化
範例:實現對象反序列化
在以後實際項目的開發過程之中,你們根本就不需要知道如何實現序列化和反序列操作,因爲都會由各自的容器幫助你自動處理。
只會在SpringData操作Redis裏面纔會出現自己實現序列化的操作。
3.transient關鍵字
實際上序列化的處理在java.io包裏面有兩類,Serializable是使用最多的序列化接口,這種操作採用自動化模式完成,也就是說默認情況下所有的屬性都會被序列化下來。
還有一個Externalizable接口是需要用戶自己動手來處理序列化,一般很少使用。
但是由於Serializable默認會將對象中所有屬性進行序列化保存,如果現在某些屬性不希望被保存了,那麼就可以使用transient關鍵字。
範例:使用transient
大部分情況下使用序列化往往是在簡單java類上,其他類上使用序列化的操作模式相對較少。而如果是簡單java類,很少去使用transient關鍵字了。