序列化

    序列化是數據持久化的一種方案,它的應用比較廣泛,例如Tomcat保存session數據就會使用它。JAVA的序列化功能是作爲I/O功能的一個子項。

    可以把序列化理解爲把JAVA對象內存中的數據採編成一串二進制的數據,然後把這些數據存放在可以持久的數據存儲設備,如磁盤。當需要還原這些數據的時候,再通過反序列化把對象還原到內在中。

    一個類想要可序列化,必須實現java.io.Serializable接口。該接口是可以進行序列化的類的標誌性接口,接口本身沒有任何要實現的方法。它僅僅是用來告訴JVM該類的對象是可以進行序列化的,並且它的序列化ID由靜態的serialVersionUID變量提供。

    serialVersionUID變量其實是一個靜態的long型常量,它的作用在序列化和反序列化過程中,起到辨別一個類的作用。在反序列化的時候,如果兩個類的類名完全相同,就通過serialVersionUID來判斷該類是否符合要求,如不符合,則拋出異常。關於serialVersionUID的用法,可參考:http://www.javaeye.com/topic/761540 。

    JAVA I/O主要用ObjectInputStream和ObjectOutputStream來對對象進行序列化和反序列化。

序列化:ObjectOutputStream oos = new ObjectOutputStream(os);
       oos.writeObject(A);

反序列化:ObjectInputStream ios =new ObjectInputStream(is);
          A a=(A)ios.readObject();

    JAVA裏面,只要實現了java.io.Serializable接口的類都可以序列化,但要求這個類裏面的所有成員變量也是可以序列化的。例如類A中含有類B的對象的引用,如果類A可以序列化,則B應該也可以序列化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章