Serializable的做用

前兩天接觸到VO,DTO,entity這些概念,發現別人的代碼中會有 implements serializable這個東西,以前並無見過這種寫法,就去了解了一下緣由java

import java.io.Serializable;
 
public class Admin implements Serializable {
}
 

  

Serializable主要做用將類的實例持久化保存,序列化就是保存,反序列化就是讀取。保存也不必定保存在本地,也能夠保存到遠方。類必定要實現Serializable才能夠sql

這個介紹很是的不接地氣,因而我與去看了幾篇博客,是這樣理解的:數據庫

    序列化的過程,就是一個「freeze」的過程,它將一個對象freeze(冷凍)住,而後進行存儲,等到再次須要的時候,再將這個對象de-freeze就能夠當即使用。網絡

    咱們覺得的沒有進行序列化,實際上是在聲明的各個不一樣變量的時候,由具體的數據類型幫助咱們實現了序列化操做。分佈式

    若是有人打開過Serializable接口的源碼,就會發現,這個接口實際上是個空接口,那麼這個序列化操做,究竟是由誰去實現了呢?其實,看一下接口的註釋說明就知道,當咱們讓實體類實現Serializable接口時,實際上是在告訴JVM此類可被序列化,可被默認的序列化機制序列化。ide

爲何須要序列化
1,存儲對象在存儲介質中,以便在下次使用的時候,能夠很快捷的重建一個副本。也就是When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object.oop

問題:我沒有實現序列化的時候,我同樣能夠存入到個人sqlserver或者MySQL、Oracle數據庫中啊,爲何必定要序列化才能存儲呢????sqlserver

2,便於數據傳輸,尤爲是在遠程調用的時候!雲計算

 

其實說了這麼多,想表達的意思就是:orm

Serializable接口是一個裏面什麼都沒有的接口
它的源代碼是public interface Serializable{},即什麼都沒有。

若是一個接口裏面什麼內容都沒有,那麼這個接口是一個標識接口,好比,一個學生遇到一個問題,排錯排了幾天也沒解決,此時,她舉手了(示意我去幫他解決),而後我過去,幫他解決了,那麼這個舉手其實就是一個標識,本身不能解決的問題標示我去幫他解決,在Java中的這個Serializable接口是給JVM看的,告訴JVM,我不作這個類的序列化了,你(JVM)給我序列化,序列化就是變成二進制流,好比雲計算、Hadoop,特別是Hadoop徹底就是分佈式環境,那麼就要涉及到對象要在網絡中傳輸,裏面的全是二進制流,固然你來作這個序列化操做也能夠,可是這個類裏面可能還有一個類,若是你把外面的類對象Person變成二進制,那麼裏面也要序列化(這要用到深度遍歷,很麻煩),乾脆告訴JVM,讓他來幫你作。
serializable接口就是Java提供用來進行高效率的異地共享實例對象的機制,實現這個接口便可。

序列化是將對象狀態轉換爲可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換爲對象。這兩個過程結合起來,能夠輕鬆地存儲和傳輸數據。

相關文章
相關標籤/搜索