JAVA bean爲什麼要實現序列化

  簡而言之:序列化,就是爲了在不一樣時間或不一樣平臺的JVM之間共享實例對象。即序列化出於兩個緣由:①、用於持久化到磁盤上;②、用於做爲數據流在網絡上傳輸。java

  所謂的Serializable,就是java提供的通用數據保存和讀取的接口。至於從什麼地方讀出來和保存到哪裏去,都被隱藏在函數參數的背後了。這樣,任何類型只要實現了Serializable接口,就能夠被保存到文件中,或者做爲數據流經過網絡發送到別的地方。也能夠用管道來傳輸到系統的其餘程序中。這樣極大的簡化了類的設計。只要設計一個保存一個讀取功能就能解決上面說的全部問題。編程

      java的"對象序列化"能讓你將一個實現了Serializable接口的對象轉換成一組byte,這樣往後要用這個對象時候,你就能把這些byte數據恢復出來,並據此從新構建那個對象了。網絡

      工做流當中流程變量的幾種數據類型:string integer short long double boolean date binary serializable,這就是爲何要將JAVA bean實現序列化的緣由,由於你將對象設置到流程變量中必需要實現序列化,不然會在設置流程變量的時候報錯找不到該類型。函數

      java對象序列化機制就是把內存中的Java對象(User之類的JavaBean)轉換成二進制流。java對象序列化後能夠很方便的存儲或者在網絡中傳輸。Java的序列化機制是經過運行時判斷類的序列化ID(serialVersionUID)來斷定版本的一致性。在反序列化時,java虛擬機會經過二進制流中的serialVersionUID與本地的對應的實體類進行比較,若是相同就認爲是一致的,能夠進行反序列化,正確得到信息,不然拋出序列化版本不一致的異常。因此涉及到數據傳輸或者存儲的類,嚴格意義上來講都要加上序列化ID,這也是一種良好的編程習慣。設計

注:對象

  一、在序列化對象時,不只會序列化當前對象自己,還會對該對象引用的其它對象也進行序列化,如此引用傳遞序列化。若是一個對象包含的成員變量是容器類等並深層引用,那麼序列化過程開銷也較大。接口

  二、當字段被聲明爲 transient 後,默認序列化機制就會忽略該字段。(還有方法就是自定義writeObject方法,見下代碼示例)內存

  三、在單例類中添加一個readResolve()方法(直接返回單例對象),以保證在序列化過程仍保持單例特性。虛擬機

相關文章
相關標籤/搜索