天天看點

serialVersionUID的作用

在很多應用中,需要對某些對象進行序列化,讓它們離開記憶體空間,入住實體硬碟,以便長期儲存。比如最常見的是Web伺服器中的Session對象,當有10萬使用者并發通路,就有可能出現10萬個Session對象,記憶體可能吃不消,于是Web容器就會把一些seesion先序列化到硬碟中,等要用了,再把儲存在硬碟中的對象還原到記憶體中,說白了,就是能将一個2進制檔案變成記憶體中的對象。在JAVA中,要實作這種機制,隻要實作Serializable接口就可以了,先看下面這個簡單例子,serialVersionUID稍後引出。我們先定義一個簡單的Person類,然後建立這個對象,最後序列化它到一個檔案。

/*****(Person類)*******/

import java.io.Serializable;

public class Person implements Serializable {

   private String name;

   public String getName() {

       return name;

   }

   public void setName(String name) {

       this.name = name;

}

/*****(将對象序列化到一個檔案)*******/

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class WhySerialversionUID {

public static void main(String[] args) throws Exception {

Person person= new Person();

person.setName("jack");

ObjectOutputStream oo = new ObjectOutputStream  (new FileOutputStream(new File("E://jack.test")));

                            oo.writeObject(person);

oo.close();

/*****(通過以下方法可以正常的将檔案中儲存的對象還原到記憶體中)*******/

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:\\jack.test")));

          Person person = (Person)ois.readObject();    

           String name= person.getName();

         System.Out.Print("name is: "+name);

一切都那麼順利,但是如果在序列化之後,Person這個類發生了改變呢?比如,多了一個成員變量。我們做如下試驗,還是先将對象序列化到一個檔案中,之後在Person這個類中添加一個成員變量,如下:

   //添加這麼一個成員變量

   private String address;

}

繼續閱讀