**——從網路上查的序列化:
將物件的狀態資訊轉化為可以儲存或者傳輸的形式過程。在序列化期間,物件將其狀態寫入到臨時或者永續性儲存區。以後,可以通過從儲存區讀取或反序列化物件的狀態,重新建立該物件。
當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為物件。
把物件轉化為位元組序列的過程稱為物件的序列化
把位元組序列恢復為物件過程稱為物件的反序列化
為什麼要序列化?
序列化的目的就是為了跨程序傳遞格式化資料。
實現序列化的步驟
將需要被序列化的類實現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的物件相同"的標記,否則,儲存該物件
通過以上的步驟序列化機制解決了物件引用的問題!
為什麼要序列化,如何序列化和反序列化?
當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...
什麼是序列化和反序列化 什麼是序列化和並行化
當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...
什麼是序列化和反序列化 什麼是序列化和並行化
當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...