什么叫序列化
序列化是一種處理對(duì)象流的機(jī)制——把內(nèi)存中的Java對(duì)象轉(zhuǎn)換成二進(jìn)制流趴樱。
對(duì)象流化后馒闷,將對(duì)象內(nèi)容保存在磁盤文件中或作為數(shù)據(jù)流進(jìn)行網(wǎng)絡(luò)傳輸酪捡。簡(jiǎn)單來說,序列化是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程窜司。
為什么需要序列化
java對(duì)象序列化后可以很方便的存儲(chǔ)或者在網(wǎng)絡(luò)中傳輸沛善。
從服務(wù)器硬盤上把序列化的對(duì)象取出,然后通過網(wǎng)絡(luò)傳到客戶端塞祈,再由客戶端把序列化的對(duì)象讀入內(nèi)存金刁,執(zhí)行相應(yīng)的處理。
這里首先要確定一件事议薪,內(nèi)存中將對(duì)象作為參數(shù)傳遞其實(shí)只是傳遞對(duì)象的引用(指針)尤蛮。
就如我們熟知的繼承,并非是將父類對(duì)象保存在子類對(duì)象中斯议,而是子類對(duì)象包含了父類的引用产捞。
在Java內(nèi)部,繼承是通過隱式的組合實(shí)現(xiàn)的哼御。子類對(duì)象中會(huì)保存一個(gè)實(shí)例對(duì)象的引用super坯临,引用指向其父類。
實(shí)際的方法調(diào)用中恋昼,java會(huì)優(yōu)先在當(dāng)前類對(duì)象中尋找名稱相同的方法看靠,如果沒有,進(jìn)根據(jù)super引用到父類對(duì)象中去尋找液肌,所以挟炬,如果父類方法在子類中得到重寫,java會(huì)調(diào)用子類的方法嗦哆,而不會(huì)調(diào)用被重寫的父類方法谤祖。
這也是多態(tài)的實(shí)現(xiàn)機(jī)制。
到這里老速,基本就明白了粥喜,內(nèi)存?zhèn)鱽韨魅サ亩际堑刂范眩绻苯訉⑵渲苯哟鎺?kù)橘券,到時(shí)候內(nèi)存又經(jīng)過刷洗容客,你從庫(kù)中取出來的地址無疑是刻舟求劍。
java的優(yōu)勢(shì)在于跨平臺(tái)约郁,尤其在分布式環(huán)境中,傳遞對(duì)象是非常普遍的但两,既然涉及到了傳輸鬓梅,勢(shì)必有相應(yīng)的協(xié)議,序列化就是為了解決這個(gè)問題而提出的谨湘。