Java對象為啥要實現Serializable接口?

鹹瑞柱


我想先談談序列化和反序列化,深入淺出吧。

網絡傳輸和持久化(簡單地理解為保存起來)都是有開銷的,開銷越小,性能越高。那作為對象,能夠通過轉換格式來處理,甚至理解為壓縮也行,那就大大降低開銷了。所以就有了序列化。

有序列化,就有反序列化,這是成對出現的。畢竟轉換了格式就得轉換回來,就像加密和解密一樣。

那麼聊回Java,Java處理序列化就是實現Serializable接口。如果你判斷該對象需要通過網絡傳輸、存儲,那麼就果斷實現接口吧。

噢~k。搞定!回答完畢。

以上一家之言,望採納。歡迎關注小小楓一起交流!


深圳小小楓


要知道實現這個接口的原因,首先得需要了解這個接口的目的!

Serializable 接口的作用

我們先來看一下,Java API 文檔對這個接口的解釋:

實現了 java.io.Serializable 接口的類就表示是可序列化的,未實現此接口的類將不會將其任何狀態序列化或反序列化。此接口沒有方法或字段,僅用於標識可序列化的語義。

所以,這個問題就變成了,Java 對象為什麼要序列化?我覺得有以下兩個原因:

- 對象持久化:典型的比如 HTTP Session 對象,默認在內存中,重啟後就會話就沒了,為了保持會話,可以把它序列化到文件或者數據庫

- 分佈式對象:比如 RMI(Remote Method Invocation, 雖然已經用的不多了),調用遠程主機上的服務時,可以直接使用對象作為參數,方法就像在本地使用一樣

序列化和反序列化的內容是什麼

序列化,就是通過 ObjectOutputStream 將對象的一部分字段值,甚至是集合字段的內容寫入到一個文件中。

反序列化,就是使用 ObjectInputStream 按照之前寫入的方式,從二進制文件中,讀取內容,生成一個對應類的實例對象。

持續分享源碼分析,造造輪子的文章和看法,歡迎關注交流 - 「頓悟源碼」


頓悟源碼


序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然後使用 HTTP 通過 Internet 在客戶端和服務器之間傳輸該對象。在另一端,反序列化將從該流重新構造對象。

是對象永久化的一種機制。

   確切的說應該是對象的序列化,一般程序在運行時,產生對象,這些對象隨著程序的停止運行而消失,但如果我們想把某些對象(因為是對象,所以有各自不同的特性)保存下來,在程序終止運行後,這些對象仍然存在,可以在程序再次運行時讀取這些對象的值,或者在其他程序中利用這些保存下來的對象。這種情況下就要用到對象的序列化。

   只有序列化的對象才可以存儲在存儲設備上。為了對象的序列化而需要繼承的接口也只是一個象徵性的接口而已,也就是說繼承這個接口說明這個對象可以被序列化了,沒有其他的目的。之所以需要對象序列化,是因為有時候對象需要在網絡上傳輸,傳輸的時候需要這種序列化處理,從服務器硬盤上把序列化的對象取出,然後通過網絡傳到客戶端,再由客戶端把序列化的對象讀入內存,執行相應的處理。

   對象序列化是java的一個特徵,通過該特徵可以將對象寫作一組字節碼,當在其他位置讀到這些字節碼時,可以依此創建一個新的對象,而且新對象的狀態與原對象完全相同。為了實現對象序列化,要求必須能夠訪問類的私有變量,從而保證對象狀態能夠正確的得以保存和恢復。相應的,對象序列化API能夠在對象重建時,將這些值還原給私有的數據成員。這是對java語言訪問權限的挑戰。通常用在服務器客戶端的對象交換上面,另外就是在本機的存儲。

   對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整性和可傳遞性。譬如通過網絡傳輸,或者把一個對象保存成一個文件的時候,要實現序列化接口


java樂園


實現這個接口可以序列化類的實例對象 將其變成一個文件存儲在硬盤裡 需要的時候再調用出來


未來善良


java對象常量在棧 其他在堆 如果要傳輸 肯定是連續的比特流 一般的序列化特指比特流序列化 實現serializable接口 虛擬機會自動使用內置的序列化方法 當然也可以用其他的序列化框架

json序列化 xml序列化是另外一回事


分享到:


相關文章: