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

java中的Serializable、transient關(guān)鍵字詳解

 更新時(shí)間:2023年09月28日 10:35:42   作者:BeanInJ  
這篇文章主要介紹了java中的Serializable、transient關(guān)鍵字詳解,序列化只會(huì)保存屬性值,不會(huì)保存方法,通過(guò)反序列化可以把序列化后的內(nèi)容恢復(fù)成對(duì)象,需要的朋友可以參考下

1、Serializable 序列化接口

如下,寫一個(gè)類實(shí)現(xiàn)Serializable,并標(biāo)注序列化版本號(hào)

public class  Foo implements Serializable  { 
	private static final long serialVersionUID = -5809782578272943999L;
	private int id;
	private String name;
	.
	.
	.
}

實(shí)現(xiàn)序列化接口Serializable有什么用?

1.1、有什么用?

沒(méi)有實(shí)現(xiàn)序列化的對(duì)象都保存在堆(Heap)中。 實(shí)現(xiàn)序列化后可以保存到一個(gè)文件里。

如下例:

// class  Foo implements Serializable
Foo foo = new Foo();
foo.setId(1);  
foo.setName("ho"); 
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("foo.ser"));
oos.writeObject(student);
oos.flush();
oos.close();

foo實(shí)例化后被保存在foo.ser文件中

foo.ser

Foo [id=1, name=ho]

1.2、什么情況下用?

1、該對(duì)象數(shù)據(jù)需要寫入數(shù)據(jù)庫(kù)

2、該對(duì)象需要通過(guò)網(wǎng)絡(luò)、RMI、緩存等傳遞或保存

3、該對(duì)象需要在jvm與jvm間交流

1.3、要注意些什么

1、序列化只會(huì)保存屬性值,不會(huì)保存方法

2、通過(guò)反序列化可以把序列化后的內(nèi)容恢復(fù)成對(duì)象

3、聲明為 static 和 transient 的成員變量,不能被序列化,static 成員變量是描述類級(jí)別的屬性,transient 表示臨時(shí)數(shù)據(jù)。

4、某個(gè)類可以被序列化,則其子類也可以被序列化

5、反序列化讀取序列化對(duì)象的順序要保持一致

2、transient 關(guān)鍵字

如下是LinkedList的部分源碼

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
    transient int size = 0;
    transient Node<E> first;
    .
    .
    .
 }

我們能看到size、first兩個(gè)屬性前面加了transient關(guān)鍵字。 transient 關(guān)鍵字,主要用來(lái)忽略我們不希望進(jìn)行序列化的變量。

2.1、什么情況下用?

首先,當(dāng)一個(gè)類需要序列化,但是某個(gè)屬性不需要被序列化就可以加此關(guān)鍵字。 都有哪些場(chǎng)景呢?

1、一些敏感信息,如密碼、銀行卡號(hào)等

2、非必要信息,如LinkedList中的大小、位置等

2.2、要注意些什么

1、需要實(shí)現(xiàn)Serializable接口。

2、transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。

3、本地變量是不能被transient關(guān)鍵字修飾的

4、實(shí)現(xiàn)Externalizable接口,需要在writeExternal方法中進(jìn)行手工指定所要序列化的變量,這與是否被transient修飾無(wú)關(guān)。

3、序列化與反序列化

ObjectOutputStream:IO 類,包含序列化對(duì)象的方法,writeObject()

ObjectInputStream:IO 類,包含反序列化對(duì)象的方法,readObject()

序列化示例:

public static void main(String[] args) throws Exception {
    //  創(chuàng)建 Java 對(duì)象(Foo必須已經(jīng)實(shí)現(xiàn)了Serializable接口)
    Foo foo = new Foo(22,"tt");
    //  對(duì)象輸出流
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("foo"));
    // 使用 writeObject 序列化對(duì)象
    oos.writeObject(student);
    // 刷新
    oos.flush();
    //  關(guān)閉流
    oos.close();
}

反序列化示例:

public static void main(String[] args) throws Exception {
    //  對(duì)象輸入流
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("foo"));
    //  使用 readObject() 反序列化  
    Object obj = ois.readObject();
    //  使用對(duì)象
    System.out.println(obj);
    //  關(guān)閉流
    ois.close();
}

反序列化需要借助文件輸入流讀取指定路徑的二進(jìn)制文件。

3.1、serialVersionUID 版本號(hào)的作用

JVM 首先會(huì)通過(guò)類名來(lái)區(qū)分 Java 類,類名不同,則不是同一個(gè)類。當(dāng)類名相同時(shí),JVM 就會(huì)通過(guò)序列化版本號(hào)來(lái)區(qū)分 Java 類,如果序列化版本號(hào)相同就為同一個(gè)類,序列化版本號(hào)不同就為不同的類。

到此這篇關(guān)于java中的Serializable、transient關(guān)鍵字詳解的文章就介紹到這了,更多相關(guān)java的Serializable、transient內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用bootstrap.yml讀取配置中心的配置文件

    如何使用bootstrap.yml讀取配置中心的配置文件

    這篇文章主要介紹了如何使用bootstrap.yml讀取配置中心的配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 一篇文章帶你入門Java字面量和常量

    一篇文章帶你入門Java字面量和常量

    這篇文章主要介紹了探究Java的常量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 深入淺出講解Java集合之Map接口

    深入淺出講解Java集合之Map接口

    這篇文章主要介紹了深入淺出講解Java集合之Map接口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 關(guān)于springboot配置druid數(shù)據(jù)源不生效問(wèn)題(踩坑記)

    關(guān)于springboot配置druid數(shù)據(jù)源不生效問(wèn)題(踩坑記)

    今天日常跟著網(wǎng)課學(xué)習(xí),學(xué)到了整合druid數(shù)據(jù)源,遇到了好幾個(gè)坑,希望這篇文章可以幫助一些和我一樣踩坑的人
    2021-09-09
  • 深入探索Java常量池

    深入探索Java常量池

    這篇文章主要介紹了深入探索Java常量池,涉及靜態(tài)常量池和運(yùn)行時(shí)常量池的介紹,常量池的好處,8種基本數(shù)據(jù)類型的包裝類和常量池等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Spring Boot使用GridFS實(shí)現(xiàn)文件的上傳和下載方式

    Spring Boot使用GridFS實(shí)現(xiàn)文件的上傳和下載方式

    這篇文章主要介紹了Spring Boot使用GridFS實(shí)現(xiàn)文件的上傳和下載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題

    Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題

    這篇文章主要介紹了Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Jenkins打包Maven項(xiàng)目找不到mvn:not found的解決方案

    Jenkins打包Maven項(xiàng)目找不到mvn:not found的解決方案

    文章講述了在使用Docker重新部署Jenkins并使用流水線腳本打包項(xiàng)目時(shí)遇到的編譯找不到mvn命令的問(wèn)題,通過(guò)檢查Jenkins服務(wù)器上的Maven安裝、Maven插件、全局工具配置以及系統(tǒng)環(huán)境變量,最終解決了問(wèn)題
    2025-11-11
  • 詳解微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

    詳解微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

    微信開(kāi)發(fā)中,經(jīng)常有這樣的需求:獲得用戶頭像、綁定微信號(hào)給用戶發(fā)信息,那么實(shí)現(xiàn)這些的前提就是授權(quán)!本文對(duì)此進(jìn)行系統(tǒng)介紹,需要的朋友一起來(lái)看下吧
    2016-12-12
  • 詳解Java中三種狀態(tài)機(jī)實(shí)現(xiàn)方式來(lái)優(yōu)雅消滅 if-else 嵌套

    詳解Java中三種狀態(tài)機(jī)實(shí)現(xiàn)方式來(lái)優(yōu)雅消滅 if-else 嵌套

    這篇文章主要為大家詳細(xì)介紹了Java中三種狀態(tài)機(jī)實(shí)現(xiàn)方式從而優(yōu)雅消滅 if-else 嵌套,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08

最新評(píng)論

洪雅县| 潞西市| 谷城县| 德昌县| 临湘市| 来宾市| 临沂市| 牙克石市| 安远县| 禹城市| 运城市| 绥阳县| 西充县| 长治市| 南宫市| 德江县| 普兰店市| 大姚县| 丰县| 皮山县| 静海县| 乌兰浩特市| 临西县| 邻水| 板桥市| 永修县| 平南县| 河间市| 如东县| 阳朔县| 措美县| 金秀| 周口市| 武胜县| 湖南省| 双牌县| 博爱县| 定襄县| 新疆| 习水县| 云梦县|