爲何JAVA對象須要實現序列化?

  • 序列化是一種用來處理對象流的機制。java

  • 所謂對象流:就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。數據庫

  • 序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。編程

  • 序列化的實現:將須要被序列化的類實現Serializable接口(標記接口),該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象;接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。網絡

  • 何時使用序列化呢?app

    • 一:對象序列化能夠實現分佈式對象
      主要應用例如:RMI(即遠程調用Remote Method Invocation)要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時同樣。
    • 二:java對象序列化不只保留一個對象的數據,並且遞歸保存對象引用的每一個對象的數據。
      能夠將整個對象層次寫入字節流中,能夠保存在文件中或在網絡鏈接上傳遞。利用對象序列化能夠進行對象的"深複製",即複製對象自己及引用的對象自己。序列化一個對象可能獲得整個對象序列。
    • 三:序列化能夠將內存中的類寫入文件或數據庫中。
      好比:將某個類序列化後存爲文件,下次讀取時只需將文件中的數據反序列化就能夠將原先的類還原到內存中。也能夠將類序列化爲流數據進行傳輸。總的來講就是將一個已經實例化的類轉成文件存儲,下次須要實例化的時候只要反序列化便可將類實例化到內存中並保留序列化時類中的全部變量和狀態。
    • 四: 對象、文件、數據,有許多不一樣的格式,很難統一傳輸和保存。
      序列化之後就都是字節流了,不管原來是什麼東西,都能變成同樣的東西,就能夠進行通用的格式傳輸或保存,傳輸結束之後,要再次使用,就進行反序列化還原,這樣對象仍是對象,文件仍是文件
  • 由於JAVA中要將對象序列化爲 流的形式 進行傳輸。分佈式


  • 對象的序列化就是爲了數據傳輸,在你的代碼的裏是對象格式,而在傳輸的時候不可能還保持這對象的樣子。
  • 當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象。
  • 1.概念
    • 序列化:把Java對象轉換爲字節序列的過程。
    • 反序列化:把字節序列恢復爲Java對象的過程。
  • 2.用途 對象的序列化主要有兩種用途:
    • 1)把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中。
    • 2)在網絡上傳送對象的字節序列。

  • 所謂的Serializable,就是java提供的通用數據保存和讀取的接口。至於從什麼地方讀出來和保存到哪裏去都被隱藏在函數參數的背後了。這樣子,任何類型只要實現了Serializable接口,就能夠被保存到文件中,或者做爲數據流經過網絡發送到別的地方。也能夠用管道來傳輸到系統的其餘程序中。這樣子極大的簡化了類的設計。只要設計一個保存一個讀取功能就能解決上面說得全部問題。
  • java的"對象序列化"能讓你將一個實現了Serializable接口的對象轉換成一組byte,這樣往後要用這個對象時候,你就能把這些byte數據恢復出來,並據此從新構建那個對象了。
  • 工做流當中流程變量的幾種數據類型:string、integer、short、long、double、boolean、date、binary、serializable,這就是爲何要將javabean實現序列化的緣由,由於你將對象設置到流程變量中必需要實現序列化,不然會在設置流程變量的時候報錯找不到該類型。
  • java對象序列化機制就是把內存中的Java對象(User之類的JavaBean)轉換成二進制流。java對象序列化後能夠很方便的存儲或者在網絡中傳輸。
  • Java的序列化機制是經過運行時判斷類的序列化ID(serialVersionUID)來斷定版本的一致性。
  • 在反序列化時,java虛擬機會經過二進制流中的serialVersionUID與本地的對應的實體類進行比較,若是相同就認爲是一致的,能夠進行反序列化,正確得到信息,不然拋出序列化版本不一致的異常。
  • 因此涉及到數據傳輸或者存儲的類,嚴格意義上來講都要加上序列化ID,這也是一種良好的編程習慣
相關文章
相關標籤/搜索