在存儲(chǔ)的時(shí)候,把字節(jié)轉(zhuǎn)換成對(duì)象教序列化的使用。如果想把字節(jié)換回來(lái),就要運(yùn)用到反序列化的概念。IO流中的序列化用于處理字節(jié)序列的問(wèn)題,需要我們先對(duì)IO流序列化的概念、圖解、使用場(chǎng)景進(jìn)行了解,在了解基本概念后,我們進(jìn)一步學(xué)習(xí)java IO流序列化的構(gòu)造方法。
1.概念
Java 提供了一種對(duì)象序列化的機(jī)制,用一個(gè)字節(jié)序列可以表示一個(gè)對(duì)象,該字節(jié)序列包含該對(duì)象的數(shù)據(jù)、對(duì)象的類(lèi)型和對(duì)象中存儲(chǔ)的屬性等信息。字節(jié)序列寫(xiě)出到文件之后,相當(dāng)于文件中 持久保存了一個(gè)對(duì)象的信息。反之,該字節(jié)序列還可以從文件中讀取回來(lái),重構(gòu)對(duì)象,對(duì)它進(jìn)行 反序列化。對(duì)象的數(shù)據(jù)、對(duì)象的類(lèi)型和對(duì)象中存儲(chǔ)的數(shù)據(jù)信息,都可以用來(lái)在內(nèi)存中創(chuàng)建對(duì)象。
2.圖解
3.使用場(chǎng)景
(1)所有需要網(wǎng)絡(luò)傳輸?shù)膶?duì)象都需要實(shí)現(xiàn)序列化接口,通過(guò)建議所有的javaBean都實(shí)現(xiàn)Serializable接口。
(2)對(duì)象的類(lèi)名、實(shí)例變量(包括基本類(lèi)型,數(shù)組,對(duì)其他對(duì)象的引用)都會(huì)被序列化;方法、類(lèi)變量、transient實(shí)例變量都不會(huì)被序列化。
(3)如果想讓某個(gè)變量不被序列化,使用transient修飾。序列化對(duì)象的引用類(lèi)型成員變量,也必須是可序列化的,否則,會(huì)報(bào)錯(cuò)。
(4)反序列化時(shí)必須有序列化對(duì)象的class文件。
(5)當(dāng)通過(guò)文件、網(wǎng)絡(luò)來(lái)讀取序列化后的對(duì)象時(shí),必須按照實(shí)際寫(xiě)入的順序讀取。
(6)單例類(lèi)序列化,需要重寫(xiě)readResolve()方法;否則會(huì)破壞單例原則。
(7)同一對(duì)象序列化多次,只有第一次序列化為二進(jìn)制流,以后都只是保存序列化編號(hào),不會(huì)重復(fù)序列化。
(8)建議所有可序列化的類(lèi)加上serialVersionUID 版本號(hào),方便項(xiàng)目升級(jí)。
4.構(gòu)造方法
以上就是java IO流序列化的概念學(xué)習(xí),可以用于字符與對(duì)象的轉(zhuǎn)換,在用法上有序列化和反序列化兩種,想要學(xué)習(xí)的可以在課后找資料了解。更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專(zhuān)業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。