什麼是序列化?為什麼要序列化?

2021-10-06 17:32:46 字數 1393 閱讀 9497

**——從網路上查的

序列化

將物件的狀態資訊轉化為可以儲存或者傳輸的形式過程。在序列化期間,物件將其狀態寫入到臨時或者永續性儲存區。以後,可以通過從儲存區讀取或反序列化物件的狀態,重新建立該物件。

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為物件。

把物件轉化為位元組序列的過程稱為物件的序列化

把位元組序列恢復為物件過程稱為物件的反序列化

為什麼要序列化?

序列化的目的就是為了跨程序傳遞格式化資料。

實現序列化的步驟

將需要被序列化的類實現serializable介面,該介面沒有需要實現的方法,implements serializable

只是為了標註該物件是可被序列化的。然後使用乙個輸出流(如:fileoutputstream)來構造乙個

objectoutputstream(物件流)物件。接著,使用objectoutputstream物件的writeobject(object obj)方法

就可以將引數為obj的物件寫出(即儲存其狀態),要恢復的話則用輸入流。

在序列化的過程中,有些資料字段我們不想將其序列化,對於此類字段我們只需要在定義

時給它加上transient關鍵字即可,對於transient欄位序列化機制會跳過不會將其寫入檔案,當然

也不可被恢復。但有時我們想將某一欄位序列化,但它在sdk中的定義卻是不可序列化的型別,

這樣的話我們也必須把他標註為transient,可是不能寫入又怎麼恢復呢?好在序列化機制為包含

這種特殊問題的類提供了如下的方法定義:

private void readobject(objectinputstream in) throws ioexception, classnotfoundexception;

private void writeobject(objectoutputstream out) throws ioexception;

序列化機制的解決方案:

1.儲存到磁碟的所有物件都獲得乙個序列號(1, 2, 3等等)

2.當要儲存乙個物件時,先檢查該物件是否被儲存了。

3.如果以前儲存過,只需寫入"與已經儲存的具有序列號x的物件相同"的標記,否則,儲存該物件

通過以上的步驟序列化機制解決了物件引用的問題!

為什麼要序列化,如何序列化和反序列化?

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...

什麼是序列化和反序列化 什麼是序列化和並行化

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...

什麼是序列化和反序列化 什麼是序列化和並行化

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...