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

淺談java什么時(shí)候需要用序列化?

 更新時(shí)間:2023年01月18日 09:26:18   作者:菠菜很好吃  
本文主要介紹了淺談java什么時(shí)候需要用序列化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、Java序列化概述

簡單說就是為了保存在內(nèi)存中的各種對(duì)象的狀態(tài)(也就是實(shí)例變量,不是方法),并且可以把保存的對(duì)象狀態(tài)再讀出來。雖然你可以用你自己的各種各樣的方法來保存objectstates,但是Java給你提供一種應(yīng)該比你自己好的保存對(duì)象狀態(tài)的機(jī)制,那就是序列化。

  • 序列化:將Java對(duì)象轉(zhuǎn)換成字節(jié)流的過程。
  • 反序列化:將字節(jié)流轉(zhuǎn)換成Java對(duì)象的過程。
  • 當(dāng)Java對(duì)象需要在網(wǎng)絡(luò)上傳輸或者持久化存儲(chǔ)到文件中時(shí),就需要對(duì)Java對(duì)象進(jìn)行序列化處理。
  • 序列化的實(shí)現(xiàn):類實(shí)現(xiàn)Serializable接口,這個(gè)接口沒有需要實(shí)現(xiàn)的方法。實(shí)現(xiàn)Serializable接口是為了告訴jvm這個(gè)類的對(duì)象可以被序列化。

二、什么時(shí)候用序列化?

  • 當(dāng)你想把的內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫中時(shí)候;
  • 當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;
  • 當(dāng)你想通過RMI傳輸對(duì)象的時(shí)候。

三、項(xiàng)目創(chuàng)建很多對(duì)象怎么優(yōu)化?

場景:

  • 當(dāng)一個(gè)類存在繼承關(guān)系時(shí),你創(chuàng)建一個(gè)子類的對(duì)象時(shí),如果在沒有明確指定的情況下,子類是會(huì)隱式的去調(diào)用父類的無參構(gòu)造的。假設(shè),我們需要頻繁創(chuàng)建的對(duì)象,是一個(gè)繼承關(guān)系比較深的類的話,調(diào)用構(gòu)造函數(shù)的開銷不容小窺。
  • 如果一時(shí)間內(nèi),頻繁創(chuàng)建某對(duì)象時(shí),這些平時(shí)不顯眼的消耗一疊加起來,就變得很客觀了。但是,當(dāng)我們使用clone的話,就可以避免這個(gè)問題。
  • 大數(shù)據(jù)開發(fā),消費(fèi)kafka后,實(shí)例化到對(duì)象上,頻繁創(chuàng)建對(duì)象。

優(yōu)化思路一:加條件判斷

假如創(chuàng)建的對(duì)象,需要在 if 判斷條件中使用,則在 if 判斷條件中new新對(duì)象,這樣可以減少對(duì)象的創(chuàng)建。

優(yōu)化思路二:使用clone淺拷貝

clone的最大特點(diǎn)就是,不會(huì)去調(diào)用任何構(gòu)造方法

  • 對(duì)于需要頻繁創(chuàng)建的實(shí)體類,需要實(shí)現(xiàn)Serializable和Cloneable接口
  • 在此實(shí)體類中寫一個(gè)getInstance(),其中就是返回clone()
  • 在方法中新建對(duì)象的時(shí)候,直接getInstance()就可以。
import lombok.Data;
import java.io.Serializable;

@Data
public class User implements Serializable,Cloneable{

? ? private static final long serialVersionUID = 1L;
? ? private static User ?user = new User();
? ? /**
? ? ?* 用戶id
? ? ?*/
? ? private Long userId;
? ? /**
? ? ?* 用戶名稱
? ? ?*/
? ? private String userName;
? ? /**
? ? ?* 調(diào)用對(duì)象創(chuàng)建優(yōu)化
? ? ?* @return
? ? ?*/
? ? public static User getInstance(){
? ? ? ? try {
? ? ? ? ? ? return (User) user.clone();
? ? ? ? } catch (CloneNotSupportedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return new User();
? ? }
}
if (flag) {
? ? ?// 將創(chuàng)建對(duì)象放到if中,不進(jìn)入if則不創(chuàng)建,提高效率
? ? ?//SysMenuManagerGrant grant = new SysMenuManagerGrant();
? ? ?User user = User.getInstance();
}

到此這篇關(guān)于淺談java什么時(shí)候需要用序列化 的文章就介紹到這了,更多相關(guān)java 序列化 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

古交市| 宜阳县| 临武县| 乡城县| 琼中| 图们市| 淄博市| 玛曲县| 贵德县| 本溪| 申扎县| 岑巩县| 商洛市| 静安区| 哈密市| 竹北市| 廊坊市| 本溪| 乐陵市| 金门县| 吉木萨尔县| 忻州市| 南平市| 新乡市| 白河县| 黑龙江省| 临澧县| 威宁| 临海市| 杨浦区| 孙吴县| 安仁县| 寿光市| 从化市| 东丰县| 临潭县| 林周县| 鲁山县| 西乌| 调兵山市| 巴南区|