java 序列化和反序列化和serialVersionUID

1、序列化和反序列化的概念java

把對象轉換爲字節序列的過程稱爲對象的序列化服務器

把字節序列恢復爲對象的過程稱爲對象的反序列網絡

對象的序列化主要有兩種用途:併發

- 把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中

     - 在網絡上傳送對象的字節序列

  在不少應用中,須要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。好比最多見的是Web服務器中的Session對象,當有 10萬用戶併發訪問,就有可能出現10萬個Session對象,內存可能吃不消,因而Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。code

  當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象。對象

2、serialVersionUID的做用接口

s​e​r​i​a​l​V​e​r​s​i​o​n​U​I​D​:​ ​字​面​意​思​上​是​序​列​化​的​版​本​號​,凡是實現Serializable接口的類都有一個表示序列化版本標識符的靜態變量。 假如一個通過了序列化的實體沒有寫明serialVersionUID,那麼java在編譯類爲class的時候就會自動添加一個serialVersionUID,serialVersionUID的取值是Java運行時環境根據類的內部細節自動生成的。若是對類的源代碼做了修改,再從新編譯,新生成的類文件的serialVersionUID的取值有可能也會發生變化。第一次編譯啓動我將對象寫入的磁盤,第二次修改類後編譯啓動我將對象讀出將會拋出java.io.InvalidClassException異常,這就是版本號不一致致使的,若是我在類中寫定了將不會拋出異常。 顯式地定義serialVersionUID有兩種用途:進程

  • 在某些場合,但願類的不一樣版本對序列化兼容,所以須要確保類的不一樣版本具備相同的serialVersionUID
  • 在某些場合,不但願類的不一樣版本對序列化兼容,所以須要確保類的不一樣版本具備不一樣的serialVersionUID
相關文章
相關標籤/搜索