Java中什麼是序列化?

飄走的我發表於2016-08-16

  序列化,又稱為“串化”,可以形象的把它理解為把Java物件記憶體中的資料採編成一串二進位制的資料,然後把這些資料存放在可以可以持久化的資料裝置上,如磁碟。當需要還原這些資料的時候,在通過反序列化的過程,把物件又重新還原到記憶體中。

   java.io.Serializable介面是可以進行序列化的類的標誌性介面,該介面本身沒有任何需要實現的抽象方法,它僅僅是用來告訴JVM該類的物件可以進行反序列化的,並且它的序列化ID由靜態的serialVersionlUID變數提供。

   serialVersionlUID變數其實是一個靜態的long型的常量,它的作用在序列化和反序列化的過程中,起到了一個辨別類的作用。在反序列化的時候,如果倆個類的類名完全相同,就通過serialVersionlUID老判斷該類是否符合要求,如果不行,則丟擲異常。

   javaI/O提供了一對類用做物件的序列化和反序列化,主要包括ObjectInputStreamObjectOutputStream。它們的用法與位元組流相似,只不過此時處理的是物件,而不僅僅是位元組資料了。

總結:

  序列化本質上就是把物件記憶體中的資料按照一定規則,變成一系列的位元組資料,然後在把這些位元組資料寫入到流中。而反序列化的過程相反,先讀取位元組資料,然後在重新組裝成Java物件。

所有需要進行序列化的類,都必須實現Serializable介面,必要時還需要提供靜態的常量serialVersionUID

相關文章