在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)現(xiàn)序列化和反序列化為什么要實(shí)現(xiàn)Serializable接口

Android編程精選 ? 來源:CSDN ? 作者:椰子Tyshawn ? 2022-07-12 11:05 ? 次閱讀

做服務(wù)化,需要把所有model包里的類都實(shí)現(xiàn)Serializable接口, 同時(shí)還要顯示指定serialVersionUID的值。聽到這個(gè)需求,我腦海里就突然出現(xiàn)了好幾個(gè)問題,比如說:

序列化和反序列化

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

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

什么時(shí)候需要用到序列化和反序列化呢?

當(dāng)我們只在本地JVM里運(yùn)行下Java實(shí)例,這個(gè)時(shí)候是不需要什么序列化和反序列化的, 但當(dāng)我們需要將內(nèi)存中的對象持久化到磁盤, 數(shù)據(jù)庫中時(shí),當(dāng)我們需要與瀏覽器進(jìn)行交互時(shí), 當(dāng)我們需要實(shí)現(xiàn)RPC時(shí),這個(gè)時(shí)候就需要序列化和反序列化了。

前兩個(gè)需要用到序列化和反序列化的場景,是不是讓我們有一個(gè)很大的疑問? 我們在與瀏覽器交互時(shí),還有將內(nèi)存中的對象持久化到數(shù)據(jù)庫中時(shí),好像都沒有去進(jìn)行序列化和反序列化,因?yàn)槲覀兌紱]有實(shí)現(xiàn)Serializable接口, 但一直正常運(yùn)行。

下面先給出結(jié)論:

只要我們對內(nèi)存中的對象進(jìn)行持久化或網(wǎng)絡(luò)傳輸, 這個(gè)時(shí)候都需要序列化和反序列化.

理由:

服務(wù)器與瀏覽器交互時(shí)真的沒有用到Serializable接口嗎? JSON格式實(shí)際上就是將一個(gè)對象轉(zhuǎn)化為字符串, 所以服務(wù)器與瀏覽器交互時(shí)的數(shù)據(jù)格式其實(shí)是字符串, 我們來看來String類型的源碼:

poYBAGLM5WaAeyVsAADlsXQGlkM013.jpg

String類型實(shí)現(xiàn)了Serializable接口,并顯示指定serialVersionUID的值。

然后我們再來看對象持久化到數(shù)據(jù)庫中時(shí)的情況,Mybatis數(shù)據(jù)庫映射文件里的insert代碼:

pYYBAGLM5X6AeU3SAABSix10Bbk078.jpg

實(shí)際上我們并不是將整個(gè)對象持久化到數(shù)據(jù)庫中, 而是將對象中的屬性持久化到數(shù)據(jù)庫中, 而這些屬性都是實(shí)現(xiàn)了Serializable接口的基本屬性。

實(shí)現(xiàn)序列化和反序列化為什么要實(shí)現(xiàn)Serializable接口?

在Java中實(shí)現(xiàn)了Serializable接口后,JVM會在底層幫我們實(shí)現(xiàn)序列化和反序列化, 如果我們不實(shí)現(xiàn)Serializable接口, 那自己去寫一套序列化和反序列化代碼也行, 至于具體怎么寫, Google一下你就知道了。

實(shí)現(xiàn)Serializable接口就算了, 為什么還要顯示指定serialVersionUID的值?

如果不顯示指定serialVersionUID,JVM在序列化時(shí)會根據(jù)屬性自動生成一個(gè)serialVersionUID, 然后與屬性一起序列化,再進(jìn)行持久化或網(wǎng)絡(luò)傳輸. 在反序列化時(shí),JVM會再根據(jù)屬性自動生成一個(gè)新版serialVersionUID,然后將這個(gè)新版serialVersionUID與序列化時(shí)生成的舊版serialVersionUID進(jìn)行比較, 如果相同則反序列化成功, 否則報(bào)錯.

如果顯示指定了serialVersionUID, JVM在序列化和反序列化時(shí)仍然都會生成一個(gè)serialVersionUID, 但值為我們顯示指定的值, 這樣在反序列化時(shí)新舊版本的serialVersionUID就一致了。

在實(shí)際開發(fā)中, 不顯示指定serialVersionUID的情況會導(dǎo)致什么問題? 如果我們的類寫完后不再修改, 那當(dāng)然不會有問題, 但這在實(shí)際開發(fā)中是不可能的,我們的類會不斷迭代, 一旦類被修改了,那舊對象反序列化就會報(bào)錯. 所以在實(shí)際開發(fā)中, 我們都會顯示指定一個(gè)serialVersionUID, 值是多少無所謂, 只要不變就行。

寫個(gè)實(shí)例測試下:

User類

不顯示指定serialVersionUID.

poYBAGLM5bmATDjoAADE3tBVFuI262.jpg

poYBAGLM5cKARs6HAABKja56wSg415.jpg

測試類

先進(jìn)行序列化, 再進(jìn)行反序列化.

pYYBAGLM5fGADpVAAAGAgrSz_mw962.jpg

pYYBAGLM5fmAEUlsAAA8Wgz1H6o479.jpg

結(jié)果

先注釋掉反序列化代碼,執(zhí)行序列化代碼,然后User類新增一個(gè)屬性sex。

pYYBAGLM5iWAZJxyAADVZJJr1Bw657.jpg

pYYBAGLM5i2ACbSAAACcP1Hf3Dg941.jpg

再注釋掉序列化代碼執(zhí)行反序列化代碼,最后結(jié)果如下:

序列化前的結(jié)果: User{name='tyshawn', age=18}Exception in thread "main" java.io.InvalidClassException: org.tyshawn.SerializeAndDeserialize.User; local class incompatible: stream classdesc serialVersionUID = 1035612825366363028, local class serialVersionUID = -1830850955895931978報(bào)錯結(jié)果為序列化與反序列化產(chǎn)生的serialVersionUID不一致。

接下來我們在上面User類的基礎(chǔ)上顯示指定一個(gè)serialVersionUID。

poYBAGLM5lmALd2xAAAeVtahAXk183.jpg

再執(zhí)行上述步驟, 測試結(jié)果如下:

poYBAGLM5miAFVtCAABGruQrwYg110.jpg

顯示指定serialVersionUID后就解決了序列化與反序列化產(chǎn)生的serialVersionUID不一致的問題。

Java序列化的其他特性

先說結(jié)論, 被transient關(guān)鍵字修飾的屬性不會被序列化, static屬性也不會被序列化。

我們來測試下這個(gè)結(jié)論:

User類

poYBAGLM5qaADmAWAAEkCBKh5h4352.jpg

pYYBAGLM5q6AIREwAAETOQGRbiE266.jpg

測試類

pYYBAGLM5uKAUZX_AAGU7j52Bic863.jpg

poYBAGLM5uiAQ0aVAAA7LL1_O6Y789.jpg

結(jié)果

先注釋掉反序列化代碼, 執(zhí)行序列化代碼, 然后修改User類signature = “我的眼里只有你”, 再注釋掉序列化代碼執(zhí)行反序列化代碼, 最后結(jié)果如下:

poYBAGLM5v-ALZ49AAB0bxxmfIk875.jpg

static屬性為什么不會被序列化?

因?yàn)樾蛄谢轻槍ο蠖缘?,而static屬性優(yōu)先于對象存在,隨著類的加載而加載, 所以不會被序列化。

看到這個(gè)結(jié)論,是不是有人會問,serialVersionUID也被static修飾,為什么serialVersionUID會被序列化? 其實(shí)serialVersionUID屬性并沒有被序列化,JVM在序列化對象時(shí)會自動生成一個(gè)serialVersionUID,然后將我們顯示指定的serialVersionUID屬性值賦給自動生成的serialVersionUID。

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8961

    瀏覽量

    153295
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2986

    瀏覽量

    107082
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11816

原文標(biāo)題:Java 序列化和反序列化,為什么要實(shí)現(xiàn) Serializable 接口?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙5開發(fā)寶藏案例分享---跨線程性能優(yōu)化指南

    , bookList); // 卡在主線程序列化! 改造后 (<8ms): // 關(guān)鍵:實(shí)現(xiàn)Sendable接口! class Book implements Sendable
    發(fā)表于 06-12 17:13

    快手上線鴻蒙應(yīng)用高性能解決方案:數(shù)據(jù)反序列化性能提升90%

    普通對象(如 JSON 數(shù)據(jù))與類實(shí)例進(jìn)行互轉(zhuǎn),是實(shí)現(xiàn)面向?qū)ο缶幊膛c數(shù)據(jù)序列化解耦的核心工具。隨著業(yè)務(wù)復(fù)雜度的提升,該庫在反序列化過程中逐漸暴露出性能瓶頸,影響用戶核心體驗(yàn)。因此
    發(fā)表于 05-15 10:01

    快手上線鴻蒙應(yīng)用高性能解決方案

    了其數(shù)據(jù)反序列化性能,在典型場景下能夠降低約90%的數(shù)據(jù)轉(zhuǎn)換耗時(shí),為鴻蒙應(yīng)用帶來了更流暢的用戶體驗(yàn)和更敏捷的交互響應(yīng)。
    的頭像 發(fā)表于 05-14 09:11 ?372次閱讀
    快手上線鴻蒙應(yīng)用高性能解決方案

    spartan 6 14位LVDS 反序列化

    spartan 6系列的FPGA 與14位ADC 輸出LVDS信號 怎么實(shí)現(xiàn)1:14的串轉(zhuǎn)并呢?iserdes2 在ise里面最高只能實(shí)現(xiàn)8位啊
    發(fā)表于 04-25 15:20

    什么是SerDes?SerDes有哪些應(yīng)用?

    SerDes是一種功能塊,用于對高速芯片間通信中使用的數(shù)字數(shù)據(jù)進(jìn)行序列化反序列化。用于高性能計(jì)算(HPC)、人工智能(AI)、汽車、移動和物聯(lián)網(wǎng)(IoT)應(yīng)用的現(xiàn)代片上系統(tǒng)(SoC)都實(shí)現(xiàn)
    的頭像 發(fā)表于 03-27 16:18 ?1442次閱讀
    什么是SerDes?SerDes有哪些應(yīng)用?

    使用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測

    使用BP(Backpropagation)神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測是一種常見且有效的方法。以下是一個(gè)基于BP神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測的詳細(xì)步驟和考慮因素: 一、數(shù)據(jù)準(zhǔn)備 收集數(shù)據(jù) : 收集用于訓(xùn)練
    的頭像 發(fā)表于 02-12 16:44 ?681次閱讀

    如何使用RNN進(jìn)行時(shí)間序列預(yù)測

    時(shí)間序列預(yù)測在金融、氣象、銷售預(yù)測等領(lǐng)域有著廣泛的應(yīng)用。傳統(tǒng)的時(shí)間序列分析方法,如ARIMA和指數(shù)平滑,雖然在某些情況下表現(xiàn)良好,但在處理非線性和復(fù)雜模式時(shí)可能不夠靈活。遞歸神經(jīng)網(wǎng)絡(luò)(RNN)提供了
    的頭像 發(fā)表于 11-15 09:45 ?838次閱讀

    請問TLV320DAC3100的初始PLL序列有嗎?

    TLV320DAC3100的初始PLL序列有嗎?目前我們的采樣率為48K,MCLK是12.288MHZ
    發(fā)表于 10-22 07:02

    常見的服務(wù)器容器和漏洞類型匯總

    常見的服務(wù)器容器包括KubeSphere、Tomcat、Nginx、Apache等,它們在提供便捷的服務(wù)部署和靈活的網(wǎng)絡(luò)功能的同時(shí),也可能存在著一定的安全風(fēng)險(xiǎn)。這些容器的漏洞可能導(dǎo)致數(shù)據(jù)泄露、權(quán)限被非授權(quán)訪問甚至系統(tǒng)被完全控制。具體的常見服務(wù)器容器漏洞包括解析漏洞、SSRF以及JAVA反序列化等。
    的頭像 發(fā)表于 08-29 10:39 ?491次閱讀

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】時(shí)間序列的信息提取

    的穩(wěn)健縮放、時(shí)間序列的標(biāo)準(zhǔn)。 時(shí)間序列的特征工程、時(shí)間序列的統(tǒng)計(jì)特征、時(shí)間序列的熵特征、時(shí)間序列
    發(fā)表于 08-17 21:12

    【《時(shí)間序列與機(jī)器學(xué)習(xí)》閱讀體驗(yàn)】+ 時(shí)間序列的信息提取

    之前對《時(shí)間序列與機(jī)器學(xué)習(xí)》一書進(jìn)行了整體瀏覽,并且非常輕松愉快的完成了第一章的學(xué)習(xí),今天開始學(xué)習(xí)第二章“時(shí)間序列的信息提取”。 先粗略的翻閱第二章,內(nèi)容復(fù)雜,充斥了大量的定義、推導(dǎo)計(jì)算、代碼,好在
    發(fā)表于 08-14 18:00

    【《時(shí)間序列與機(jī)器學(xué)習(xí)》閱讀體驗(yàn)】+ 了解時(shí)間序列

    收到《時(shí)間序列與機(jī)器學(xué)習(xí)》一書,彩色印刷,公式代碼清晰,非常精美。感謝作者,感謝電子發(fā)燒友提供了一個(gè)讓我學(xué)習(xí)時(shí)間序列及應(yīng)用的機(jī)會! 前言第一段描述了編寫背景: 由此可知,這是一本關(guān)于時(shí)間序列進(jìn)行大數(shù)
    發(fā)表于 08-11 17:55

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】全書概覽與時(shí)間序列概述

    他領(lǐng)域(如自然語言處理、計(jì)算機(jī)視覺等)的關(guān)聯(lián)。 ●第2章“時(shí)間序列的信息提取”:介紹特征工程的核心概念及其在時(shí)間序列分析中的廣用,比如對原始數(shù)據(jù)進(jìn)行歸一、缺失值填充等轉(zhuǎn)換;以及如何通過特征工程從時(shí)間
    發(fā)表于 08-07 23:03

    【AWTK使用經(jīng)驗(yàn)】如何實(shí)現(xiàn)序列幀動畫

    目前想在AWTK中顯示炫酷流暢的圖片動畫,此時(shí)可以用video_image控件來播放序列幀動畫。本篇文章將介紹該控件的原理和使用方法。圖1ZTP800示教器運(yùn)行v
    的頭像 發(fā)表于 07-18 08:25 ?754次閱讀
    【AWTK使用經(jīng)驗(yàn)】如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>序列</b>幀動畫

    python訓(xùn)練出的模型怎么調(diào)用

    使用pickle模塊 pickle 是Python的一個(gè)內(nèi)置模塊,用于序列化反序列化Python對象結(jié)構(gòu)。使用 pickle 可以方便地保存和加載模型。 import pickle # 保存模型
    的頭像 發(fā)表于 07-11 10:15 ?3233次閱讀
    主站蜘蛛池模板: 天堂网www天堂在线资源链接 | 欧美视频亚洲色图 | 男女全黄做爰视频 | 国产成人亚洲影视在线 | 婷婷六月丁香色婷婷网 | 婷婷丁香激情五月 | 色综合色综合色综合 | 模特精品视频一区 | 欧美成人综合在线 | 天天天天做夜夜夜做 | 成人综合在线观看 | 狠狠色丁香九九婷婷综合五月 | 天天搞夜夜爽 | 99久久99久久免费精品蜜桃 | 欧美日韩亚洲色图 | 色婷综合 | 亚洲狠狠操 | 免费人成黄页在线观看1024 | 成人免费观看一区二区 | 99国产成人精品2021 | 激情在线播放免费视频高清 | 曰曰摸天天摸人人看久久久 | 道区二区三区四区 | 97久久天天综合色天天综合色hd | 午夜福利123 | 午夜在线影视 | 中文天堂在线视频 | 欧美黄免在线播放 | 成人久久久精品乱码一区二区三区 | 未满十八18周岁禁止免费国产 | 精品福利视频网站 | 免费免费啪视频视频观看 | 激情综合激情五月 | 最近国语剧情视频在线观看 | 亚洲一级特黄 | 亚洲三级在线 | 爱爱免费 | 国产免费午夜 | 中文字幕不卡在线播放 | 一级特级女人18毛片免费视频 | 一级黄色毛毛片 |