為什么java需要序列化對象


  • 序列化是一種用來處理對象流的機制
  • 所謂對象流:就是將對象的內容進行流化,可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸與網絡之間
  • 序列化是為了解決在對象流進行讀寫操作時所引發的問題
  • 序列化的實現:將需要被序列化的類實現Serializable接口(標記接口) ,該接口沒有需要被實現的方法,implement Serializable 只是為了標注該對象是可被序列化的,而后使用一個輸出流(如 FileOutPutStream)來構造出一個ObjectOutPutStream對象,接着,是用writerObject方法就可以參數為Obj的對象寫出(即保存其狀態),要是恢復的要使用相應的輸入流ObjectInputStream
 

什么時候使用序列化?

  1. 對象序列化可以實現分布式對象,
主要用於如RMI(遠程調用 Remote method invocation) 用利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣

  2.java對象序列化不僅保留一個對象數據,而且遞歸保存對象引用的每個對象的數據

可以將整個對象層次寫入字節流中,可以保存在文件中或在網絡連接上傳遞,利用對象序列化可以進行對象的深復制,即復制對象本身及引用的對象本身,序列化一個對象可能得到整個對象序列

  3.序列化可以將內存中的類寫入文件或者數據庫

比如,將某個類序列化后保存為文件,下次讀取時只需要將文件中的數據反序列化就可以將原來的類還遠到內存中,也可以將類序列化為流進行傳輸,總的來說就是將一個已經實例的類轉換為文件儲存,下次需要實例化的時候只要反序列化既可以將實例化的內存中保留序列化時類中鎖有變量和狀態
  4.對象,文件,數據,有許多不同的格式,很難統一傳輸和保存
序列化以后都是字節流了,無論他原來是什么東西,都能變成一樣東西,就可以進行通用的格式傳輸或保存,傳輸結束以后,要再次使用,就進行反序列化,這樣對象還是對象,文件還是文件
  • 因為JAVA中要將對象序列化為流的形式進行傳輸
  • 對象的序列化就是為了數據傳輸,在你的代碼里是對象格式,而在傳輸的時候不可能還保持對象的樣子
  • 當兩個進程在進行通信時,彼此可以發送各種類型的數據,無論是何種類型的數據,都會以二進制序列額形式在網絡上傳輸,發送方需要把這個JAVA對象轉換為字節序列化,才能在網絡上傳送,接收方則需要把字節序列在恢復成java對象

  1.概念

序列化:吧Java對象轉換為字節序列的過程
反序列化:把字節序列恢復為java對象的過程
  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來判定版本是否一致
  • 在反序列化是,java虛擬機會通過二進制流中serialVersionID與本地的對應的實體類進行比較,如果相同就認為一致的,可以進行反序列化,正確獲得信息,否則拋出序列化版本不一致的異常
  • 所以設計到數據傳輸或者儲存類,嚴格意義上來說都要加上序列化ID,這也是一種良好的編程習慣.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM