您好,登錄后才能下訂單哦!
我們?cè)趯W(xué)習(xí)JavaSE的時(shí)候?qū)W習(xí)過(guò)ObjectInputStream
和ObjectOutputStream
,當(dāng)時(shí)是覺(jué)得只要一個(gè)對(duì)象要寫入文件就必須要實(shí)現(xiàn)Serializable接口。其實(shí)這樣理解完全沒(méi)有問(wèn)題。
一、問(wèn)題引入
Java中為什么要實(shí)現(xiàn)序列化接口呢?我們來(lái)看下圖:
Java程序中要往磁盤中寫入一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)如果是一個(gè)普通字符串,那么沒(méi)有問(wèn)題,所有機(jī)器都能正常識(shí)別字符串,即使需要轉(zhuǎn)成對(duì)應(yīng)的字節(jié),計(jì)算機(jī)也知道怎么將字符串轉(zhuǎn)成對(duì)應(yīng)的字節(jié)(碼表),但是如果是一個(gè)Java對(duì)象那就麻煩了,磁盤并不知道你傳遞的是一個(gè)Java對(duì)象,換句話說(shuō),磁盤不知道按照什么格式把Java對(duì)象轉(zhuǎn)換成對(duì)應(yīng)的字節(jié)。
我們知道Java對(duì)象本質(zhì)上是一個(gè)class字節(jié)碼,磁盤并不知道怎么將這個(gè)字節(jié)碼寫入到磁盤中,按何種方式去寫,所以需要"標(biāo)識(shí)"一下,告訴磁盤:“我是個(gè)Java對(duì)象,你要按這種方式寫入到磁盤中”,只不過(guò)"按這種方式寫入到磁盤"。因此實(shí)現(xiàn)Serializable接口只是標(biāo)識(shí)一下"我是個(gè)Java對(duì)象"
如果你懂了上述文字的理解,也就不難懂下述圖了:
二、加深理解
Java 提供了一種對(duì)象序列化的機(jī)制。用一個(gè)字節(jié)序列可以表示一個(gè)對(duì)象,該字節(jié)序列包含該對(duì)象的數(shù)據(jù)、對(duì)象的類型和對(duì)象中存儲(chǔ)的屬性等信息。字節(jié)序列寫出到文件之后,相當(dāng)于文件中持久保存了一個(gè)對(duì)象的信息。
反之,該字節(jié)序列還可以從文件中讀取回來(lái),重構(gòu)對(duì)象,對(duì)它進(jìn)行反序列化。對(duì)象的數(shù)據(jù)、對(duì)象的類型和對(duì)象中存儲(chǔ)的數(shù)據(jù)信息,都可以用來(lái)在內(nèi)存中創(chuàng)建對(duì)象??磮D理解序列化:
以上就是java中為什么要實(shí)現(xiàn)Serializable序列化接口的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。