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

淺談java什么時候需要用序列化?

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

一、Java序列化概述

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

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

二、什么時候用序列化?

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

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

場景:

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

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

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

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

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

  • 對于需要頻繁創(chuàng)建的實體類,需要實現(xiàn)Serializable和Cloneable接口
  • 在此實體類中寫一個getInstance(),其中就是返回clone()
  • 在方法中新建對象的時候,直接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)用對象創(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)建對象放到if中,不進入if則不創(chuàng)建,提高效率
? ? ?//SysMenuManagerGrant grant = new SysMenuManagerGrant();
? ? ?User user = User.getInstance();
}

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

相關(guān)文章

最新評論

咸宁市| 北京市| 库尔勒市| 华阴市| 交口县| 增城市| 临夏市| 特克斯县| 汾西县| 宜昌市| 榆林市| 和硕县| 丘北县| 鹤山市| 都昌县| 信阳市| 青神县| 宁陵县| 迁安市| 定西市| 理塘县| 营口市| 兴业县| 禹州市| 桐城市| 乌拉特中旗| 垫江县| 金堂县| 岫岩| 西城区| 始兴县| 涿鹿县| 兰州市| 交城县| 陆良县| 兴城市| 琼海市| 施甸县| 大兴区| 斗六市| 石台县|