最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java中的實體類要?implements?Serializable的原因分析

 更新時間:2023年06月21日 11:01:11   作者:奮豆來襲  
這篇文章主要介紹了Java中的實體類為什么要?implements?Serializable,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1. 序列化和反序列化

首先來解釋一下什么是序列化和反序列化:

序列化:把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化。
反序列化:把字節(jié)序列恢復(fù)為對象的過程稱為對象的反序列化。

  • 在 Java 和其他語言進行通信的時候,需要將對象轉(zhuǎn)化成一種通用的格式例如Json( 轉(zhuǎn)換成大家都認(rèn)識的對象 ),從對象到 Json 字符串的轉(zhuǎn)換過程就是序列化的過程,反過來, 從 Json 字符串轉(zhuǎn)換成 Java 對象的過程就是反序列化的過程。
  • 當(dāng) Java 需要把一個對象的狀態(tài)保存到文件或者是數(shù)據(jù)庫的時候,就是數(shù)據(jù)存取的過程中的中間過程,就需要序列化。我們可以把序列化的過程理解為 "freeze",它將一個 Java 對象 freeze,然后進行存儲;等到再次需要的時候,再將這個對象 "de-freeze" 就能使用了。

2. 為什么要 implements Serialzable?

  • 一個類只有實現(xiàn)了 Serializable 接口,它的對象才是可序列化的。因此如果要序列化某些類的對象,這些類就必須實現(xiàn) Serializable 接口。而實際上,Serializable 的源碼是一個空接口,沒有什么具體內(nèi)容,它的目的只是簡單的標(biāo)識一個類的對象可以被序列化。
  • serialization 允許你將實現(xiàn)了 Serializable 接口的對象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。

3. 那么什么情況下需要實現(xiàn)序列化?

  • 把內(nèi)存中的對象寫入到硬盤。例如,你的內(nèi)存不夠用了,那計算機就要將內(nèi)存里面的一部分對象暫時的保存到硬盤中,等到要用的時候再讀入到內(nèi)存中,硬盤的那部分存儲空間就是所謂的虛擬內(nèi)存。再例如,你要將某個特定的對象保存到文件中,隔幾天在把它拿出來用,那么這時候就需要實現(xiàn) Serializable 接口。
  • 使用套接字在網(wǎng)絡(luò)上傳送對象,通常情況下你可以在 server 端用獲取 socket 的 outputstream inputstream,將取得的數(shù)據(jù)處理成字符串發(fā)送到客戶端,然后在客戶端拆分字符串,但是這樣顯然會降低效率,于是你可以將 server 端數(shù)據(jù) 包裝 成一個 class implements Serializable,然后直接用objectoutputstream,objectinputstream 直接傳遞。
  • 通過 Java的 RIM(remote method invocation)傳輸對象。RMI 允許對象在本機上可以一樣操作遠(yuǎn)程機器上的對象。當(dāng)發(fā)送消息給遠(yuǎn)程對象時,就需要用到 serializaiton 機制來發(fā)送參數(shù)和接收返回值。

實體類實現(xiàn)序列化的目的:

  • 一是便于存儲
  • 二是便于傳輸

像 boolean 、int、long 類型等,都是基本數(shù)據(jù)類型,數(shù)據(jù)庫里面有與之對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。從類聲明來看,我們以為的沒有進行序列化,其實是在聲明各個不同變量的時候,由具體的數(shù)據(jù)類型幫助我們實現(xiàn)了序列化操作。所以就算我們不實現(xiàn) serializable 依舊可以正常操作。

如果平時留意的話,我們會發(fā)現(xiàn)序列化操作用于存儲時,一般是對于 NoSql 數(shù)據(jù)庫,而在使用 Nosql 數(shù)據(jù)庫進行存儲時,如 redis,它就沒有 varchar,int 之類的數(shù)據(jù)結(jié)構(gòu)。 而在沒有的情況下,我們又確實需要進行存儲,那么我們就需要將對象進行序列化。

4. 為什么要顯示聲明 serialVersionUID

serialVersionUID 的作用是驗證序列化和反序列化的過程中,對象是否保持一致。所以在一般情況下我們需要顯示的聲明serialVersionUID。如果接受者加載的該對象的類的 serialVersionUID 和發(fā)送者的類版本號不同的話,反序列化會爆出 InvalidClassException 錯誤。

什么時候會導(dǎo)致報出這個錯誤呢?例如在沒有顯示聲明版本號的時候,先將對象進行了序列化;然后不管出于什么目的,該對象的類被修改了,哪怕僅僅是添加了一個強制轉(zhuǎn)換,或者將一個 public 的屬性給私有化了,都會影響版本號。此時在這個環(huán)境下用反序列化的方法讀取以前序列化之后存儲起來的對象是會報錯的。

@Data
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId("id")
    private Integer id;
    @TableField("name")
    private String name;
    @TableField("age")
    private Integer age;
}

到此這篇關(guān)于Java中的實體類為什么要 implements Serializable?的文章就介紹到這了,更多相關(guān)Java實體類 implements Serializable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析Springboot集成Tile38客戶端之Set命令實現(xiàn)示例

    解析Springboot集成Tile38客戶端之Set命令實現(xiàn)示例

    這篇文章主要為大家介紹了解析Springboot集成Tile38客戶端之Set命令實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Java使用FFmpeg提取音頻的詳細(xì)指南

    Java使用FFmpeg提取音頻的詳細(xì)指南

    FFmpeg 是一個開源的多媒體處理工具,支持視頻、音頻的編碼、解碼、轉(zhuǎn)換等多種功能,本文將詳細(xì)講解如何使用 FFmpeg 提取音頻,包括常見的音頻格式提取、音頻質(zhì)量調(diào)整、高級處理操作等,內(nèi)容淺顯易懂,適合初學(xué)者快速掌握,需要的朋友可以參考下
    2024-11-11
  • Java RMI詳細(xì)介紹及簡單實例

    Java RMI詳細(xì)介紹及簡單實例

    這篇文章主要介紹了Java RMI詳細(xì)介紹及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • springboot+Quartz實現(xiàn)任務(wù)調(diào)度的示例代碼

    springboot+Quartz實現(xiàn)任務(wù)調(diào)度的示例代碼

    本篇文章主要介紹了springboot + Quartz 實現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計算機操作用戶界面,需要的朋友可以參考下
    2023-07-07
  • Java Swing JLabel標(biāo)簽的使用方法

    Java Swing JLabel標(biāo)簽的使用方法

    這篇文章主要介紹了Java Swing JLabel標(biāo)簽的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java中的泛型使用詳解

    Java中的泛型使用詳解

    本文給大家介紹java中的泛型知識,包括基本語法使用方法,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-10-10
  • Java經(jīng)典設(shè)計模式之適配器模式原理與用法詳解

    Java經(jīng)典設(shè)計模式之適配器模式原理與用法詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計模式之適配器模式,簡單說明了適配器模式的概念、原理,并結(jié)合實例形式分析了java適配器模式的用法與相關(guān)注意事項,需要的朋友可以參考下
    2017-08-08
  • Java之CMS和G1垃圾回收過程的異同說明

    Java之CMS和G1垃圾回收過程的異同說明

    CMS垃圾回收器主要基于并發(fā)-清理算法,目的是減少停頓時間,通過四個主要階段進行垃圾回收:初始標(biāo)記、并發(fā)標(biāo)記、重新標(biāo)記和并發(fā)清理,G1垃圾回收器采用標(biāo)記-整理算法,是JDK9后的默認(rèn)垃圾收集器,設(shè)計為全功能全代收集器
    2024-09-09
  • Java中的日期時間處理及格式化處理

    Java中的日期時間處理及格式化處理

    這篇文章主要介紹了Java中的日期時間處理及格式化處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

利津县| 田阳县| 尼玛县| 婺源县| 达尔| 容城县| 汝州市| 崇义县| 瑞丽市| 吕梁市| 昌邑市| 额济纳旗| 贺州市| 东平县| 奉新县| 桐庐县| 龙里县| 罗平县| 宣汉县| 仪陇县| 崇州市| 瑞金市| 桐庐县| 尼玛县| 东丰县| 年辖:市辖区| 千阳县| 河南省| 信丰县| 霍城县| 凯里市| 登封市| 武定县| 寿光市| 洛川县| 饶平县| 房山区| 嘉鱼县| 锡林浩特市| 绥棱县| 华阴市|