在很多應用中,需要對某些對象進行序列化,讓它們離開記憶體空間,入住實體硬碟,以便長期儲存。比如最常見的是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;
}