靜態long型別常量serialVersionUID的作用

隨風而逝,只是飄零發表於2016-04-21
  1. 需要序列化的類需要實現Serializable介面,該介面沒有任何方法,只是標示該類物件可被序列化。  
  2. 序列化過程:使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流)物件,接著,使用ObjectOutputStream物件的writeObject(Object obj)方法就可以將引數為obj的物件寫出(即儲存其狀態)  
  3. 反序列化過程:使用一個輸入流(如:FileInputStream)來構造一個ObjectInputStream(物件流)物件,接著,使用ObjectInputStream物件的readObject(Object obj)方法就可以將引數為obj的物件讀出(即獲取其狀態)
  1. 如果沒有設定這個值,你在序列化一個物件之後,改動了該類的欄位或者方法名之類的,那如果你再反序列化想取出之前的那個物件時就可能會丟擲異常,因為你改動了類中間的資訊,serialVersionUID是根據類名、介面名、成員方法及屬性等來生成一個64位的雜湊欄位,當修改後的類去反序列化的時候發現該類的serialVersionUID值和之前儲存在問價中的serialVersionUID值不一致,所以就會丟擲異常。  
  2. 而顯示的設定serialVersionUID值就可以保證版本的相容性,如果你在類中寫上了這個值,就算類變動了,它反序列化的時候也能和檔案中的原值匹配上。而新增的值則會設定成null,刪除的值則不會顯示。 

相關文章