2020-08-25

序列化和反序列化

1、序列化和反序列化
(1)序列化:使用ObjectOutputStream類和writeObject( )方法,將一個(gè)對(duì)象變成字節(jié)流绒极,用于存儲(chǔ)或網(wǎng)絡(luò)傳輸
(2)反序列化:使用ObjectInputStream類和readObject( )方法,將字節(jié)流"還原"成對(duì)象
(3)一個(gè)文件可以按照對(duì)象的數(shù)據(jù)格式保存一個(gè)或多個(gè)對(duì)象
2.1蔬捷、實(shí)現(xiàn)接口:常用類基本直接或間接地實(shí)現(xiàn)了Serializable接口
(1)如果某個(gè)類需要進(jìn)行序列化和反序列化操作垄提,必須實(shí)現(xiàn)Serializable【空實(shí)現(xiàn)】 或 Externalizable接口【序列化和反序列化兩個(gè)抽象方法】
(2)如果當(dāng)前類實(shí)現(xiàn)的序列化接口為Serializable 則必須擁有“序列化版本ID”
(3)如果當(dāng)前類實(shí)現(xiàn)的序列化接口為Externalizable(Serializable的子接口) 則不需要“序列化版本ID”
2.2、序列化和反序列化時(shí)周拐,如果需要屏蔽某個(gè)屬性變量的方法
方式1:如果不希望某個(gè)屬性被序列化铡俐,則需要在聲明該屬性變量時(shí),加入transient關(guān)鍵字妥粟。該方法適用于較少的屬性變量审丘,方式簡(jiǎn)單,效率較低勾给。
方式2:實(shí)現(xiàn)Externalizable接口滩报,進(jìn)行反序列化操作時(shí),當(dāng)前類必須擁有一個(gè)無參構(gòu)造方法播急,并且需要實(shí)現(xiàn)序列化【writeExternal( )】和反序列化【readExternal ( )】?jī)蓚€(gè)抽象方法,可自定義序列化哪些屬性脓钾。該方法適用于較多的屬性變量,方式較復(fù)雜桩警,效率較高可训。

深淺拷貝

如果一個(gè)類的對(duì)象需要進(jìn)行克隆操作(淺拷貝或者深拷貝),則必須實(shí)現(xiàn)Cloneable接口,并且重寫clone()方法,如果沒有實(shí)現(xiàn)該接口則會(huì)拋出CloneNotSupportedException異常捶枢。
淺拷貝沉噩,重寫Object的克隆方法(修改返回值類型)
深拷貝(如果類A的屬性變量中含有類B的對(duì)象)

方式1:類A和類B都需實(shí)現(xiàn)Cloneable接口,并且重寫clone()方法,

克隆類A對(duì)象柱蟀,克隆類B對(duì)象川蒙,將類B對(duì)象存入類A對(duì)象中,返回類A對(duì)象长已。
缺點(diǎn):如果一個(gè)類中存在多個(gè)類的對(duì)象作為屬性變量畜眨,所有類都需要實(shí)現(xiàn)Cloneable接口,,并且重寫clone()方法术瓮,不斷向下復(fù)制康聂。

方式2:使用序列化和反序列化實(shí)現(xiàn)”深拷貝”

類A和類B都需實(shí)現(xiàn)Serializable接口,并且添加序列化版本ID,類A自定義深拷貝方法胞四。
將當(dāng)前對(duì)象轉(zhuǎn)換為字節(jié)流(序列化)
創(chuàng)建字節(jié)數(shù)組輸出流ByteArrayOutputStream對(duì)象bos
創(chuàng)建對(duì)象輸出流ObjectOutputStream對(duì)象oos
oos調(diào)用writeObject()將當(dāng)前對(duì)象寫入字節(jié)數(shù)組輸出流bos
將字節(jié)流轉(zhuǎn)換為新的對(duì)象(反序列化)
創(chuàng)建字節(jié)數(shù)組輸入流ByteArrayInputStream對(duì)象bis,將序列化后的字節(jié)數(shù)組輸出流bos轉(zhuǎn)換為字節(jié)數(shù)組并傳入
創(chuàng)建對(duì)象輸入流ObjectInputStream對(duì)象ois
ois調(diào)用readObject()并將當(dāng)前字節(jié)流強(qiáng)轉(zhuǎn)為新的對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恬汁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辜伟,更是在濱河造成了極大的恐慌氓侧,老刑警劉巖脊另,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異约巷,居然都是意外死亡偎痛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門独郎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踩麦,“玉大人,你說我怎么就攤上這事氓癌∥角” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵贪婉,是天一觀的道長茁计。 經(jīng)常有香客問我,道長谓松,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任践剂,我火速辦了婚禮鬼譬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逊脯。我一直安慰自己优质,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布军洼。 她就那樣靜靜地躺著巩螃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匕争。 梳的紋絲不亂的頭發(fā)上避乏,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音甘桑,去河邊找鬼拍皮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛跑杭,可吹牛的內(nèi)容都是我干的铆帽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼德谅,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爹橱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窄做,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤愧驱,失蹤者是張志新(化名)和其女友劉穎慰技,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冯键,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惹盼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惫确。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手报。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖改化,靈堂內(nèi)的尸體忽然破棺而出掩蛤,到底是詐尸還是另有隱情,我是刑警寧澤陈肛,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布揍鸟,位于F島的核電站,受9級(jí)特大地震影響句旱,放射性物質(zhì)發(fā)生泄漏阳藻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一谈撒、第九天 我趴在偏房一處隱蔽的房頂上張望腥泥。 院中可真熱鬧,春花似錦啃匿、人聲如沸蛔外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夹厌。三九已至,卻和暖如春裆悄,著一層夾襖步出監(jiān)牢的瞬間矛纹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工光稼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崖技,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓钟哥,卻偏偏與公主長得像迎献,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腻贰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359