java類序列化
⑴ 在java中什麼叫做類的序列化
把對象轉換為位元組序列的過程稱為對象的序列化。
把位元組序列恢復為對象的過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
1) 把對象的位元組序列永久地保存到硬碟上,通常存放在一個文件中;
2) 在網路上傳送對象的位元組序列。
⑵ 什麼是java序列化,如何實現java序列化
序 列 化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網路的節點(在網路上傳輸).我們把這個過程稱之為序列化.
反序列化:把磁碟文件中的對象數據或者把網路節點上的對象數據,恢復成Java對象的過程.
為什麼要做序列化:
1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網路上傳輸,此時就得把對象數據轉換為二進制形式.以後存儲在HttpSession中的對象,都應該實現序列化介面(只有實現序列化介面的類,才能做序列化操作).
2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象-->二進制文件).如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.
需要做序列化的對象的類,必須實現序列化介面:java.io.Serializable介面(標志介面[沒有抽象方法]).
底層會判斷,如果當前對象是Serializable的實例,才允許做序列化. boolean ret = Java對象 instanceof Serializable;
在Java中大多數類都已經實現Serializable介面.
⑶ java序列化的好處 是不是什麼類的對象都可以被序列化 另外序列化和反序列化都需要自己實現嗎>
java對象實現了序列化就可以以對象的形式在流中傳輸。不管是文件流,還是Socket流都可以
用ObjectInputStream ObjectOutputStream 來讀寫對象。
並不是所以類都可以序列化,一般需要序列化的對象是那些實體類。什麼Bean,pojo,vo貌似都是一個意思吧。。。還是有一些對象是不能序列化的,Socket對象是不能的。還有一些忘記了,還有一些不知道···呵呵~~
實現序列化只要實現一個Serializable的介面就行,這是個標志介面,裡面沒有方法需要實現,主要的作用就是標識這兒類可以序列化·····
⑷ java中的序列化是什麼意思
序列化是將對象狀態轉換為可保持或傳輸的格式的過程。說白點就是你可以用對象輸出流輸出到文件。如果不序列化輸出的話,很可能會亂。
java中的序列化機制能夠將一個實例對象(只序列化對象的屬性值,而不會去序列化什麼所謂的方法。)的狀態信息寫入到一個位元組流中使其可以通過socket進行傳輸、或者持久化到存儲資料庫或文件系統中;然後在需要的時候通過位元組流中的信息來重構一個相同的對象。
一般而言,要使得一個類可以序列化,只需簡單實現java.io.Serializable介面即可。
⑸ java實體類為什麼要實現序列化
解答如下:
當客戶端訪問某個能開啟會話功能的資源,web伺服器就會創建一個HTTPSession對象,每個HTTPSession對象都會佔用一定的內存,如果在同一個時間段內訪問的用戶太多,就會消耗大量的伺服器內存,為了解決這個問題我們使用一種技術:session的持久化。
什麼是session的持久化?
web伺服器會把暫時不活動的並且沒有失效的HTTPSession對象轉移到文件系統或資料庫中儲存,伺服器要用時在把他們轉載到內存。
把Session對象轉移到文件系統或資料庫中儲存就需要用到序列化; java.io.Serializable。
在tomcat重啟的時候進行一個鈍化操作、啟動成功之後再進活化。
在對應的區域載入進來,不會丟失(前提是session中的存放的變數必須實現序列化介面才能鈍化,才能序列到硬碟上的一個二進制文件中去)。
⑹ Java中如何實現序列化,有什麼意義
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為了解決對象流讀寫操作時可能引發的問題(如果不進行序列化可能會存在數據亂序的問題)。
要實現序列化,需要讓一個類實現Serializable介面,該介面是一個標識性介面,標注該類對象是可被序列化的,然後使用一個輸出流來構造一個對象輸出流並通過writeObject(Object)方法就可以將實現對象寫出(即保存其狀態);如果需要反序列化則可以用一個輸入流建立對象輸入流,然後通過readObject方法從流中讀取對象。序列化除了能夠實現對象的持久化之外,還能夠用於對象的深度克隆。
⑺ java序列化的優點和缺點是什麼
序列化是什麼:
序列化就是將一個對象的狀態(各個屬性量)保存起來,然後在適當的時候再獲得。
序列化分為兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成位元組流,以便存儲在文件中或在網路上傳輸。反序列化就是打開位元組流並重構對象。對象序列化不僅要將基本數據類型轉換成位元組表示,有時還要恢復數據。恢復數據要求有恢復數據的對象實例
序列化的什麼特點:
如果某個類能夠被序列化,其子類也可以被序列化。聲明為static和transient類型的成員數據不能被序列化。因為static代表類的狀態, transient代表對象的臨時數據。
什麼時候使用序列化:
一:對象序列化可以實現分布式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。
二:java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入位元組流中,可以保存在文件中或在網路連接上傳遞。利用對象序列化可以進行對象的"深復制",即復制對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。
所謂優缺點就是該使用的時候就是優點,不該使用而是用就是缺點
⑻ 什麼是序列化,在java中如何實現序列化
一、什麼是序列化:
序列化理解成「打碎」是可以的,不過在書本上的名詞就是將對象轉換成二進制。
二、在java中如何實現序列化:
首先我們要把准備要序列化類,實現 Serializabel介面
例如:我們要Person類里的name和age都序列化
import java.io.Serializable;
public class Person implements Serializable { //本類可以序列化
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ",年齡" + this.age ;
}
}
然後:我們將name和age序列化(也就是把這2個對象轉為二進制,統族理解為「打碎」)
package org.lxh.SerDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream ;
public class ObjectOutputStreamDemo { //序列化
public static void main(String[] args) throws Exception {
//序列化後生成指定文件路徑
File file = new File("D:" + File.separator + "person.ser") ; ObjectOutputStream oos = null ;
//裝飾流(流)
oos = new ObjectOutputStream(new FileOutputStream(file)) ;
//實例化類
Person per = new Person("張三",30) ; oos.writeObject(per) ;//把類對象序列化
oos.close() ;
}
}
⑼ java中POJO類為什麼要實現序列化
不一定要 根據需求
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然後使用 HTTP 通過 Internet 在客戶端和伺服器之間傳輸該對象。在另一端,反序列化將從該流重新構造對象。
是對象永久化的一種機制。
確切的說應該是對象的序列化,一般程序在運行時,產生對象,這些對象隨著程序的停止運行而消失,但如果我們想把某些對象(因為是對象,所以有各自不同的特性)保存下來,在程序終止運行後,這些對象仍然存在,可以在程序再次運行時讀取這些對象的值,或者在其他程序中利用這些保存下來的對象。這種情況下就要用到對象的序列化。
只有序列化的對象才可以存儲在存儲設備上。為了對象的序列化而需要繼承的介面也只是一個象徵性的介面而已,也就是說繼承這個介面說明這個對象可以被序列化了,沒有其他的目的。之所以需要對象序列化,是因為有時候對象需要在網路上傳輸,傳輸的時候需要這種序列化處理,從伺服器硬碟上把序列化的對象取出,然後通過網路傳到客戶端,再由客戶端把序列化的對象讀入內存,執行相應的處理。
對象序列化是java的一個特徵,通過該特徵可以將對象寫作一組位元組碼,當在其他位置讀到這些位元組碼時,可以依此創建一個新的對象,而且新對象的狀態與原對象完全相同。為了實現對象序列化,要求必須能夠訪問類的私有變數,從而保證對象狀態能夠正確的得以保存和恢復。相應的,對象序列化API能夠在對象重建時,將這些值還原給私有的數據成員。這是對java語言訪問許可權的挑戰。通常用在伺服器客戶端的對象交換上面,另外就是在本機的存儲。
對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整性和可傳遞性。譬如通過網路傳輸,或者把一個對象保存成一個文件的時候,要實現序列化介面
⑽ java中什麼類需要序列化
序列化其實就是將對象轉換為位元組序列。所以有以下幾個地方應用得到吧。
應用場景1:通訊。(例如客戶端把java對象傳給對方,過程就是先將對象轉換為位元組數據在進行發送)
應用場景2:web保存會話,也就是免登陸進行驗證。在session中存入登陸者信息,例如User對象,序列化可以先將對象轉換成位元組數組保存在硬碟上,每次刷新反序列化進行讀取。