亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中的Serializable、transient關鍵字詳解

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

1、Serializable 序列化接口

如下,寫一個類實現Serializable,并標注序列化版本號

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

實現序列化接口Serializable有什么用?

1.1、有什么用?

沒有實現序列化的對象都保存在堆(Heap)中。 實現序列化后可以保存到一個文件里。

如下例:

// 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實例化后被保存在foo.ser文件中

foo.ser

Foo [id=1, name=ho]

1.2、什么情況下用?

1、該對象數據需要寫入數據庫

2、該對象需要通過網絡、RMI、緩存等傳遞或保存

3、該對象需要在jvm與jvm間交流

1.3、要注意些什么

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

2、通過反序列化可以把序列化后的內容恢復成對象

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

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

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

2、transient 關鍵字

如下是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兩個屬性前面加了transient關鍵字。 transient 關鍵字,主要用來忽略我們不希望進行序列化的變量。

2.1、什么情況下用?

首先,當一個類需要序列化,但是某個屬性不需要被序列化就可以加此關鍵字。 都有哪些場景呢?

1、一些敏感信息,如密碼、銀行卡號等

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

2.2、要注意些什么

1、需要實現Serializable接口。

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

3、本地變量是不能被transient關鍵字修飾的

4、實現Externalizable接口,需要在writeExternal方法中進行手工指定所要序列化的變量,這與是否被transient修飾無關。

3、序列化與反序列化

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

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

序列化示例:

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

反序列化示例:

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

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

3.1、serialVersionUID 版本號的作用

JVM 首先會通過類名來區(qū)分 Java 類,類名不同,則不是同一個類。當類名相同時,JVM 就會通過序列化版本號來區(qū)分 Java 類,如果序列化版本號相同就為同一個類,序列化版本號不同就為不同的類。

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

相關文章

  • IDEA刪除的文件怎么找回更新的方法

    IDEA刪除的文件怎么找回更新的方法

    查找本地歷史記錄IDEA在進行代碼版本管理時,會自動創(chuàng)建本地歷史記錄,如果我們誤刪了文件,可以通過查找本地歷史記錄來找回文件,本文就來介紹一下
    2023-11-11
  • Java中實現線程的超時中斷方法實例

    Java中實現線程的超時中斷方法實例

    之前在使用Java實現熔斷降級組件的時候,需要實現接口請求的超時中斷,通過查找相關資料了解了相關的方法,下面這篇文章主要給大家介紹了關于Java中實現線程的超時中斷的相關資料,需要的朋友可以參考下
    2018-06-06
  • spring-boot 禁用swagger的方法

    spring-boot 禁用swagger的方法

    本篇文章主要介紹了spring-boot 禁用swagger的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java數據結構之實現雙向鏈表的示例

    java數據結構之實現雙向鏈表的示例

    這篇文章主要介紹了java數據結構實現雙向鏈表的示例,需要的朋友可以參考下
    2014-03-03
  • SpringCloud實現Redis在各個微服務的Session共享問題

    SpringCloud實現Redis在各個微服務的Session共享問題

    Redis是運行在內存中,查取速度很快。本文重點給大家介紹SpringCloud實現Redis在各個微服務的Session共享,感興趣的朋友一起看看吧
    2018-08-08
  • Java判斷是否為閏年的方法示例

    Java判斷是否為閏年的方法示例

    這篇文章主要介紹了Java判斷是否為閏年的方法示例,本文直接給出示例代碼,并講解了判斷原理,需要的朋友可以參考下
    2015-06-06
  • springboot常用的請求參數的接收方式

    springboot常用的請求參數的接收方式

    在Spring?Boot中,接收請求參數的方式有多種,這篇文章主要為大家整理了9個常用的方式,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • MyBatis寫入Json字段以及Json字段轉對象示例詳解

    MyBatis寫入Json字段以及Json字段轉對象示例詳解

    這篇文章主要給大家介紹了關于MyBatis寫入Json字段以及Json字段轉對象的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java動態(tài)獲取實現某個接口下所有的實現類對象集合

    Java動態(tài)獲取實現某個接口下所有的實現類對象集合

    今天小編就為大家分享一篇關于Java動態(tài)獲取實現某個接口下所有的實現類對象集合,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    通過Java程序展示如何來實現創(chuàng)建模板,并通過郵件合并功能來合并文本數據和圖片數據的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07

最新評論