1、序列化和反序列化的概念java
把對象轉換爲字節序列的過程稱爲對象的序列化服務器
把字節序列恢復爲對象的過程稱爲對象的反序列網絡
對象的序列化主要有兩種用途:併發
- 把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中 - 在網絡上傳送對象的字節序列
在不少應用中,須要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。好比最多見的是Web服務器中的Session對象,當有 10萬用戶併發訪問,就有可能出現10萬個Session對象,內存可能吃不消,因而Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。code
當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象。對象
2、serialVersionUID的做用接口
serialVersionUID: 字面意思上是序列化的版本號,凡是實現Serializable接口的類都有一個表示序列化版本標識符的靜態變量。 假如一個通過了序列化的實體沒有寫明serialVersionUID,那麼java在編譯類爲class的時候就會自動添加一個serialVersionUID,serialVersionUID的取值是Java運行時環境根據類的內部細節自動生成的。若是對類的源代碼做了修改,再從新編譯,新生成的類文件的serialVersionUID的取值有可能也會發生變化。第一次編譯啓動我將對象寫入的磁盤,第二次修改類後編譯啓動我將對象讀出將會拋出java.io.InvalidClassException異常,這就是版本號不一致致使的,若是我在類中寫定了將不會拋出異常。 顯式地定義serialVersionUID有兩種用途:進程