java實(shí)體類為什么要實(shí)現(xiàn)序列化
java實(shí)體類為什么要實(shí)現(xiàn)序列化
解答如下:當(dāng)客戶端訪問(wèn)某個(gè)能開(kāi)啟會(huì)話功能的資源,web服務(wù)器就會(huì)創(chuàng)建一個(gè)HTTPSession對(duì)象百科,每個(gè)HTTPSession對(duì)象都會(huì)占用一定的內(nèi)存,如果在同一個(gè)時(shí)間段內(nèi)訪問(wèn)的用戶太多,就會(huì)消耗大量的服務(wù)器內(nèi)存,為了解決這個(gè)問(wèn)題我們使用一種技術(shù):session的持久化。什么是session的持久化?web服務(wù)器會(huì)把暫時(shí)不活動(dòng)的并且沒(méi)有失效的HTTPSession對(duì)象轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫(kù)中儲(chǔ)存,服務(wù)器要用時(shí)在把他們轉(zhuǎn)載到內(nèi)存。
把Session對(duì)象轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫(kù)中儲(chǔ)存就需要用到序列化; java.io.Serializable。
在tomcat重啟的時(shí)候進(jìn)行一個(gè)鈍化操作、啟動(dòng)成功之后再進(jìn)活化。在對(duì)應(yīng)的區(qū)域加載進(jìn)來(lái),不會(huì)丟失(前提是session中的存放的變量必須實(shí)現(xiàn)序列化接口才能鈍化,才能序列到硬盤上的一個(gè)二進(jìn)制文件中去)。
為什么實(shí)體類要實(shí)現(xiàn)serializable接口序列化
當(dāng)客戶端訪問(wèn)可以打開(kāi)會(huì)話功能的資源時(shí),web服務(wù)器會(huì)創(chuàng)建一個(gè)與客戶端對(duì)應(yīng)的HttpSession對(duì)象,每個(gè)HttpSession對(duì)象都會(huì)使用一定的內(nèi)存空間。如果在一定時(shí)間內(nèi)有大量用戶訪問(wèn)網(wǎng)站,那么大量的HttpSession對(duì)象就會(huì)堆積在web服務(wù)器的內(nèi)存中,這會(huì)消耗大量的服務(wù)器內(nèi)存。
即使用戶已經(jīng)離開(kāi)或關(guān)閉了瀏覽器,web服務(wù)器仍然會(huì)保留相應(yīng)的HttpSession對(duì)象,這將占用web服務(wù)器的內(nèi)存資源,直到它們超時(shí)。
Web服務(wù)器通常會(huì)將那些暫時(shí)處于非活動(dòng)狀態(tài)但尚未超時(shí)的HttpSession對(duì)象傳輸?shù)轿募到y(tǒng)或數(shù)據(jù)庫(kù)中進(jìn)行存儲(chǔ),然后在服務(wù)器想要使用它們時(shí)將它們從文件系統(tǒng)或數(shù)據(jù)庫(kù)加載到內(nèi)存中。這項(xiàng)技術(shù)被稱為會(huì)話持久性。 要將HttpSession對(duì)象保存到文件系統(tǒng)或數(shù)據(jù)庫(kù),需要將HttpSession對(duì)象中的每個(gè)屬性對(duì)象序列化到文件系統(tǒng)或數(shù)據(jù)庫(kù)。當(dāng)從文件系統(tǒng)或數(shù)據(jù)庫(kù)(如內(nèi)存)加載HttpSession對(duì)象時(shí),需要對(duì)其進(jìn)行反序列化,以恢復(fù)HttpSession對(duì)象中的每個(gè)屬性對(duì)象。
因此,存儲(chǔ)在HttpSession對(duì)象中的每個(gè)屬性對(duì)象都必須實(shí)現(xiàn)Serializable接口。 簡(jiǎn)言之,就是為了 將對(duì)象的狀態(tài)保存在存儲(chǔ)媒體中以便可以在以后重新創(chuàng)建出完全相同的副本。實(shí)現(xiàn) Serializable接口還能 按值將對(duì)象從一個(gè)應(yīng)用程序域發(fā)送至另一個(gè)應(yīng)用程序域。
Java中為什么要序列化?什么時(shí)候用到序列化?
序列化可以將內(nèi)存中的類寫入文件或數(shù)據(jù)庫(kù)中。比如將某個(gè)類序列化后存為文件,下次讀取時(shí)只需將文件中的數(shù)據(jù)反序列化就可以將原先的類還原到內(nèi)存中。
也可以將類序列化為流數(shù)據(jù)進(jìn)行傳輸。
總的來(lái)說(shuō)就是將一個(gè)已經(jīng)實(shí)例化的類轉(zhuǎn)成文件存儲(chǔ),下次需要實(shí)例化的時(shí)候只要反序列化即可將類實(shí)例化到內(nèi)存中并保留序列化時(shí)類中的所有變量和狀態(tài)。例如:hibernate中實(shí)體類的鈍化就是將類序列化后存入磁盤并釋放內(nèi)存空間。