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

java中的序列化解析

 更新時間:2023年09月27日 10:17:29   作者:grace.free  
這篇文章主要介紹了java中的序列化解析,為了將對象進行網(wǎng)絡(luò)傳輸或者是持久化,我們需要將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或者傳輸?shù)男问?這個轉(zhuǎn)換的過程就叫序列化,需要的朋友可以參考下

一、序列化

為了將對象進行網(wǎng)絡(luò)傳輸或者是持久化,我們需要將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或者傳輸?shù)男问健?/p>

這個轉(zhuǎn)換的過程就叫序列化

jre能力

Jre本身提供了序列化的支持,我們可以調(diào)用outputStreamwriteObject方法

如果讓Java幫我們做的話,我們需要實現(xiàn)Serializable接口,這個接口是一個mini接口,沒有需要實現(xiàn)的方法,說白了,只是做一個標(biāo)記。

package freeedu.test;
import java.io.*;
/**
 * @author 木子的晝夜編程
 */
public class SerTest {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建對象
        Person p = new Person("小花", 18, "女");
        // 創(chuàng)建ObjectOutputStream
        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("E:/MyNote/obj/Person.obj"));
        // 持久化
        outputStream.writeObject(p);
    }
}
// 人 未實現(xiàn)Serializable
class Person{
    String name;
    int age;
    String gender;
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}

讀者朋友仔細(xì)看看,這樣寫對嗎?

一般問你對不對,那肯定就是不對啦!

使用JRE自帶序列化功能,被序列化的對象必須實現(xiàn)Serializable,否則就會報錯

在這里插入圖片描述

下面才是正確的寫法:

package freeedu.test;
import java.io.*;
/**
 * @author 木子的晝夜編程
 */
public class SerTest {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建對象
        Person p = new Person("小花", 18, "女");
        // 創(chuàng)建ObjectOutputStream
        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("E:/MyNote/obj/Person.obj"));
        // 持久化
        outputStream.writeObject(p);
    }
}
// 人  實現(xiàn)Serializable
class Person implements Serializable{
    String name;
    int age;
    String gender;
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}

執(zhí)行成功之后,看一看文件內(nèi)容?

在這里插入圖片描述

看不懂?沒關(guān)系,我們可以反序列化,再看內(nèi)容

package freeedu.test;
import java.io.*;
/**
 * @author 木子的晝夜編程
 */
public class DesTest {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建ObjectInputStream
        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("E:/MyNote/obj/Person.obj"));
        // 讀取對象
        Object o = inputStream.readObject();
        // 判斷對象持久化對象是不是Person
        if (o instanceof Person) {
            // 如果是的話 強轉(zhuǎn)
            Person p = (Person) o;
            // 打印信息
            System.out.println(p.age);
            System.out.println(p.name);
            System.out.println(p.gender);
        }
    }
}

在這里插入圖片描述

Serializable

在這里插入圖片描述

可以看到,他只是一個接口,沒有任何需要實現(xiàn)的內(nèi)容。

其他

當(dāng)然了,這只是Java自帶的序列化,我們平時網(wǎng)絡(luò)傳輸?shù)葧褂玫胶芏嗥渌蛄谢?/p>

比如:

  • Json序列化
  • 谷歌Gson的Json 、阿里的FastJson 、Jackson 等
  • ProtoBuff序列化 據(jù)說做游戲的很多用這個 是谷歌出的 會大大節(jié)省傳輸流量

二、Serializable 接口

我們看java自帶序列化,需要實現(xiàn)一個Serializable,而實現(xiàn)這個接口,要求我們需要添加一個serialVersionUID 屬性,就像下邊這樣

// 人
class Person implements Serializable{
    // 定義serialVersionUID
    private static final long serialVersionUID = 8940196742313994740L;
    String name;
    int age;
    String gender;
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}

如果你不定義這個serialVersionUID,jdk會根據(jù)序列化類的信息,比如字段等自動生成一個,但是你如果修改了這個類(比如添加字段),然后再反序列化沒有修改之前序列化的內(nèi)容就會報錯

比如我們修改一下Person類,然后反序列化一下上邊那個文件

class Person implements Serializable{
    String name;
    int age;
    String gender;
    String aaaaaaa;
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}

在這里插入圖片描述

如果Person類在序列化的時候定義了serialVersionUID,那么就不會出現(xiàn)這個問題

這個serialVersionUID很像是我們的銀行卡號,如果你的銀行卡沒卡號,只是根據(jù)你的手機號,或者是你的姓名進行綁定,那么當(dāng)你手機號變更了,或者名稱變更了,那么就對應(yīng)不上你的卡了。所以我們銀行卡都有一個卡號,這個卡號隨銀行卡產(chǎn)生而產(chǎn)生,隨銀行卡注銷而注銷。

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

相關(guān)文章

  • Stream流中的Map與flatMap的區(qū)別及說明

    Stream流中的Map與flatMap的區(qū)別及說明

    Map轉(zhuǎn)換單個元素為新值,保持流長度;flatMap將元素轉(zhuǎn)換為流再合并,實現(xiàn)扁平化處理,兩者區(qū)別在于返回類型(對象vs流)及是否改變元素數(shù)量,適用于不同數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換場景
    2025-09-09
  • Java集合框架概覽之ArrayList源碼刨析

    Java集合框架概覽之ArrayList源碼刨析

    本文主要從一個簡單的代碼入手,對ArrayList?的最常用的源碼進行刨析,文中源碼摘自?JDK1.8,源碼的注釋部分博主也加入了自己的翻譯,歡迎讀者食用
    2023-03-03
  • 在Spring中實現(xiàn)異步處理的步驟和代碼演示

    在Spring中實現(xiàn)異步處理的步驟和代碼演示

    在Spring中實現(xiàn)異步處理通常涉及到@Async注解,通過步驟和代碼演示,可以在Spring應(yīng)用程序中實現(xiàn)異步處理,記住要根據(jù)你的應(yīng)用程序的實際需求來調(diào)整線程池和異步方法的設(shè)計,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Java中的System類、BigInteger類和BigDecimal類詳解

    Java中的System類、BigInteger類和BigDecimal類詳解

    這篇文章主要介紹了Java中的System類、BigInteger類和BigDecimal類詳解,arraycopy()方法,復(fù)制數(shù)組元素,比較適合底層調(diào)用,一般使用Arrays.copyOf()完成復(fù)制數(shù)組,需要的朋友可以參考下
    2023-09-09
  • java多線程中線程封閉詳解

    java多線程中線程封閉詳解

    在本文里我們給大家分享了關(guān)于java多線程中線程封閉的知識點內(nèi)容以及用法,有需要讀者們可以參考下。
    2019-07-07
  • Java實現(xiàn)企業(yè)發(fā)放的獎金根據(jù)利潤提成問題

    Java實現(xiàn)企業(yè)發(fā)放的獎金根據(jù)利潤提成問題

    這篇文章主要介紹了請利用數(shù)軸來分界,定位。注意定義時需把獎金定義成長整型,需要的朋友可以參考下
    2017-02-02
  • Java實現(xiàn)打印二叉樹所有路徑的方法

    Java實現(xiàn)打印二叉樹所有路徑的方法

    這篇文章主要介紹了Java實現(xiàn)打印二叉樹所有路徑的方法,涉及java二叉樹遍歷與運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • SpringMVC中MultipartFile上傳獲取圖片的寬度和高度詳解

    SpringMVC中MultipartFile上傳獲取圖片的寬度和高度詳解

    本篇文章主要介紹了SpringMVC中MultipartFile上傳獲取圖片的寬度和高度,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java利用轉(zhuǎn)義字符過濾HTML中的標(biāo)簽

    Java利用轉(zhuǎn)義字符過濾HTML中的標(biāo)簽

    通過本文介紹的Java方法,我們可以輕松利用轉(zhuǎn)義字符來過濾HTML文本中的標(biāo)簽,確保輸出內(nèi)容的純文本展示,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Spring Cloud Feign內(nèi)部實現(xiàn)代碼細(xì)節(jié)

    Spring Cloud Feign內(nèi)部實現(xiàn)代碼細(xì)節(jié)

    Feign 的英文表意為“假裝,偽裝,變形”, 是一個http請求調(diào)用的輕量級框架,可以以Java接口注解的方式調(diào)用Http請求,而不用像Java中通過封裝HTTP請求報文的方式直接調(diào)用。接下來通過本文給大家分享Spring Cloud Feign內(nèi)部實現(xiàn)代碼細(xì)節(jié),感興趣的朋友一起看看吧
    2021-05-05

最新評論

绥中县| 肥西县| 福清市| 巴青县| 香格里拉县| 青田县| 恩施市| 普格县| 永平县| 墨玉县| 凤台县| 新野县| 贡觉县| 甘肃省| 石城县| 绿春县| 静宁县| 五寨县| 浦北县| 全南县| 金沙县| 水富县| 雷州市| 兴业县| 田林县| 株洲市| 寿宁县| 库伦旗| 凤庆县| 青州市| 榕江县| 连州市| 新余市| 西丰县| 新田县| 清苑县| 乌恰县| 遂溪县| 盐池县| 平湖市| 北宁市|