序列化是用來處理物件流的機制。 實際可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。
序列化是為了解決在物件流進行讀寫操作時所引發的問題。序列化的實作:
將需要被序列化的類別實作Serializable介面(標記介面),該介面沒有需要實作的方法,implements Serializable只是為了標註該物件是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來建構一個ObjectOutputStream(物件流)物件;接著,使用ObjectOutputStream物件的writeObject(Object obj)方法就可以將參數為obj的物件寫出(即保存其狀態),要恢復的話則用輸入流。
什麼時候使用序列化呢?一:物件序列化可以實現分散式物件。
主要應用程式例如:RMI(即遠端呼叫Remote Method Invocation)要利用物件序列化運作遠端主機上的服務,就像在本機上執行物件時一樣。
二:java物件序列化不僅保留一個物件的數據,而且遞歸保存物件引用的每個物件的數據。可以將整個物件層次寫入一個位元組流中,可以保存在檔案中或在網路連線上傳遞。利用物件序列化可以進行物件的"深複製",即複製物件本身及引用的物件本身。序列化一個物件可能得到整個物件序列。
三:序列化可以將記憶體中的類別寫入檔案或資料庫中。例如:將某個類別序列化後存為文件,下次讀取時只需將文件中的資料反序列化就可以將原先的類別還原到記憶體中。 也可以將類別序列化為串流資料進行傳輸。總的來說就是將一個已經實例化的類別轉成文件存儲,下次需要實例化的時候只要反序列化即可將類別實例化到內存中並保留序列化時類別中的所有變數和狀態。
四: 物件、檔案、數據,有許多不同的格式,很難統一傳輸和保存。序列化以後就都是位元組流了,無論原來是什麼東西,都能變成一樣的東西,就可以進行通用的格式傳輸或保存,傳輸結束以後,要再次使用,就進行反序列化還原,這樣對象還是對象,文件還是文件
因為JAVA中要將對象序列化為 流的形式 進行傳輸。以上是java為什麼序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!