關于Java實體類Serializable序列化接口的作用和必要性解析
在Java Web編程中,很多實體類會實現Serializable 接口,但是很多實體在使用中并沒有序列化也能正常使用。
定義:把對象轉換為字節(jié)序列的過程稱為對象的序列化
把字節(jié)序列恢復為對象的過程稱為對象的反序列化
那么Serializable 接口有什么作用呢?
Serializable作為序列化的一種方式。
序列化可以理解為一種機制,按照一定的格式將Java 對象的某種狀態(tài)轉成介質可以接受的形式,以便存儲或傳輸。
序列化實現將Java 對象相關的類信息、屬性及屬性值等等保存起來,便于存儲和傳輸。
序列化的作用可以總結以下:
(1)提供一種簡單又可拓展的對象保存恢復機制
(2)對于遠程調用,能方便對對象進行編碼和解碼,就像實現對象直接傳輸
(3)可以將對象持久化到介質中,就像實現對對象直接存儲。
(4)允許對象自定義外部存儲的格式。
序列化的簡單理解方式:
序列化的過程,就是一個“freeze”的過程,它將一個對象freeze(冷凍)住,然后進行存儲,等到再次需要的時候,再將這個對象de-freeze就可以立即使用。我們以為的沒有進行序列化,其實是在聲明的各個不同變量的時候,由具體的數據類型幫助我們實現了序列化操作。如果有人打開過Serializable接口的源碼,就會發(fā)現,這個接口其實是個空接口,那么這個序列化操作,到底是由誰去實現了呢?其實,看一下接口的注釋說明就知道,當我們讓實體類實現Serializable接口時,其實是在告訴JVM此類可被序列化,可被默認的序列化機制序列化。
例子:
@Data @ToString public class UserRole implements Serializable { private static final long serialVersionUID = -6056129805075132981L; private int id; private int user_id; private int role_id; }
一個實體類User實現Serializable接口,并且定義了serialVersionUID變量。
serialVersionUID是用來輔助對象的序列化與反序列化的,原則上序列化后的數據當中的serialVersionUID與當前類當中的serialVersionUID一致,那么該對象才能被反序列化成功。
工作機制:在序列化的時候系統(tǒng)將serialVersionUID寫入到序列化的文件中去,當反序列化的時候系統(tǒng)會先去檢測文件中的serialVersionUID是否跟當前的文件的serialVersionUID是否一致,如果一直則反序列化成功,否則就說明當前類跟序列化后的類發(fā)生了變化。
到此這篇關于關于Java實體類Serializable序列化接口的作用和必要性解析的文章就介紹到這了,更多相關Java序列化接口Serializable內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java countDownLatch如何實現多線程任務阻塞等待
這篇文章主要介紹了Java countDownLatch如何實現多線程任務阻塞等待,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10