更新時(shí)間:2022-07-28 11:36:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1430次
Java實(shí)體類(lèi)序列化是什么?下面就由動(dòng)力節(jié)點(diǎn)小編來(lái)為大家進(jìn)行介紹。
序列化就是把對(duì)象改成二進(jìn)制的過(guò)程。是可以存儲(chǔ)或者傳輸?shù)倪^(guò)程。
我們創(chuàng)建出來(lái)的這些對(duì)象都存在于JVM堆內(nèi)存中,只有JVM處于運(yùn)行狀態(tài)的時(shí)候,這些對(duì)象才可能存在。一旦JVM停止,這些對(duì)象也就隨之消失;但是在真實(shí)的應(yīng)用場(chǎng)景中,我們需要將這些對(duì)象持久化下來(lái),并且在需要的時(shí)候?qū)?duì)象重新讀取出來(lái),Java的序列化可以幫助我們實(shí)現(xiàn)該功能。
可以保存在磁盤(pán)上或者網(wǎng)絡(luò)發(fā)送。
一般實(shí)現(xiàn)java.io.Serializeble可以實(shí)例化。
也可以實(shí)現(xiàn)java.io.Externalizable來(lái)進(jìn)行實(shí)例化。
ObjectInputStream和ObjectOutPutStream進(jìn)行存儲(chǔ)和讀取對(duì)象。
變量聲明成靜態(tài)變量 static
變量聲明成瞬態(tài)變量 transient
如果沒(méi)有設(shè)置這個(gè)值,你在序列化一個(gè)對(duì)象之后,改動(dòng)了該類(lèi)的字段或者方法名之類(lèi)的,那如果你再反序列化想取出之前的那個(gè)對(duì)象時(shí)就可能會(huì)拋出異常,因?yàn)槟愀膭?dòng)了類(lèi)中間的信息,serialVersionUID是根據(jù)類(lèi)名、接口名、成員方法及屬性等來(lái)生成一個(gè)64位的哈希字段,當(dāng)修改后的類(lèi)去反序列化的時(shí)候發(fā)現(xiàn)該類(lèi)的serialVersionUID值和之前保存在問(wèn)價(jià)中的serialVersionUID值不一致,所以就會(huì)拋出異常。而顯示的設(shè)置serialVersionUID值就可以保證版本的兼容性,如果你在類(lèi)中寫(xiě)上了這個(gè)值,就算類(lèi)變動(dòng)了,它反序列化的時(shí)候也能和文件中的原值匹配上。而新增的值則會(huì)設(shè)置成null,刪除的值則不會(huì)顯示。
就如左邊的客戶(hù)端訪(fǎng)問(wèn)右邊數(shù)據(jù)庫(kù),一般情況下都是在同一個(gè)windows下,如果將服務(wù)器部署到linux上,這就設(shè)計(jì)到不同的主機(jī)。
客戶(hù)端可以調(diào)用服務(wù)器,所以會(huì)傳遞參數(shù),假如你傳遞的是字符串,那么雙方都是可以識(shí)別的,假設(shè)你傳遞的是一個(gè)Java對(duì)象,那么服務(wù)器就不識(shí)別不了這個(gè)Java對(duì)象,本質(zhì)上Java對(duì)象是class字節(jié)碼,服務(wù)器并不一定能識(shí)別字節(jié)碼文件,那么我們把Java對(duì)象轉(zhuǎn)化成公共的格式叫做序列化,將公共的格式轉(zhuǎn)化為對(duì)象叫做反序列化。而保存到系統(tǒng)文件或者數(shù)據(jù)庫(kù)中只是一種表示形式。
以上就是關(guān)于“Java實(shí)體類(lèi)序列化的介紹”,大家如果想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線(xiàn)學(xué)習(xí),里面的課程內(nèi)容從入門(mén)到精通,細(xì)致全面,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)