最近在學習做微服務的專案,在參考他人的微服務專案時,發現資料庫表所對應的物體類都會實作Serializable介面,以往做的專案中并沒有遇到過,也沒有實作過這個介面,所以好奇物體類為什么需要實作該介面,在查閱相關博客后,進行了總結記錄
原文鏈接:【java】java物體類為什么要實作Serializable介面_來日淺談的博客-CSDN博客

1. 首先需要知道序列化的概念及使用場景
概念:
序列化其實就是將Java物件轉換為位元組流的程序,反序列化則相反,是將位元組流轉換為Java物件
使用場景:
- 需要把記憶體中的物件狀態資料保存到一個檔案或者資料庫中的時候,這個場景是比較常見的,例如我們利用mybatis框架撰寫持久層insert物件資料到資料庫中時
- 網路通信時需要用套接字在網路中傳送物件時,如我們使用RPC協議進行網路通信時
當我們需要把物件的狀態資訊通過網路進行傳輸(網路傳輸),或者需要將物件的狀態資訊持久化時,就需要把物件進行序列化
序列化對于一門面向物件的編程語言來說還是十分重要的,因為無論什么編程語言,其底層涉及IO操作的部分是由作業系統幫其完成的,而IO操作都是以位元組流的方式進行的,所以寫操作都需要將編程語言的資料型別轉換為位元組流,讀操作需要將位元組流轉換為編程語言的特定資料型別
2. 什么是Serializable介面
Serializable介面是用于實作Java類序列化操作而提供的一個語意級介面,一個類只有實作了Serializable介面,它的物件才能被序列化
但該介面中其實沒有任何方法和欄位,只是起到標記作用,相當于告訴JVM,我需要在進行IO操作時將該物件轉換為位元組流
3. 為什么要定義serialVersionUID變數
由圖中還可以看到定義了一個serialVersionUID變數
對于JVM來說,要進行持久化的類必須要有一個標記,只有持有這個標記JVM才允許類創建的物件可以通過其IO系統轉換為位元組資料,從而實作持久化,而這個標記就是Serializable介面,
而在反序列化的程序中則需要使用serialVersionUID來確定由哪個類來加載這個物件,所以我們在實作Serializable介面的時候,一般還會要去盡量顯示地定義serialVersionUID
如果沒有顯示地宣告該變數,JVM會幫我們自動生成,但有時候可能會出現問題
該變數需要用private修飾,且為常量
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538159.html
標籤:其他
上一篇:python中的串列和元組
