摘要:序列化對象和平臺無關,序列化得到的字節流可以在任何平臺反序列化。從文件中或網絡上獲得序列化的字節流后,根據字節流中所保存的對象狀態及描述信息,通過反序列化重建對象。因此意味著不要序列化靜態變量不屬于對象狀態的一部分,因此它不參與序列化。
一.序列化和反序列化
(1)序列化:將內存中的對象轉化為字節序列,用于持久化到磁盤中或者通過網絡傳輸。對象序列化的最主要的用處就是傳遞和保存對象,保證對象的完整性和可傳遞性。序列化是把對象轉換成有序字節流,以便在網絡上傳輸或者保存在本地文件中。序列化后的字節流保存了Java對象的狀態以及相關的描述信息。序列化機制的核心作用就是對象狀態的保存與重建。
(2)網絡傳輸方式
通過socket,RMI傳輸數據時需要將對象序列化
(2)反序列化:從字節序列創建對象的過程稱為反序列化。序列化對象和平臺無關,序列化得到的字節流可以在任何平臺反序列化。從文件中或網絡上獲得序列化的字節流后,根據字節流中所保存的對象狀態及描述信息,通過反序列化重建對象。
二.java類序列化
通過實現java.io.Serializable接口,可以在java類中啟用序列化。它是一個標記接口,意味著不包含任何接口和字段。僅用于標識可序列化的語義。
三.serialVersionUID
(1)serialVersionUID是一個標識符,主要用于對象的版本控制。
(2)如果java類已經實現了java.io.Serializable接口,那么默認會在類中添加一個serialVersionUID。但是在該類中添加、刪除、修改字段都會生存新的serialVersionUID。這樣導致序列化到文件中的serialVersionUID和修改后class中的serialVersionUID不一致,造成對象無法恢復。
(3)java序列化的過程依賴正確的serialVersionUID。無論是否改變類中的字段,serialVersionUID都應該保持不變。所以我們應該在類中顯示的添加一個serialVersionUID。
(4)通過實驗驗證serialVersionUID的作用
四.Transient,static,final關鍵字
(1)該修飾符只適用于變量,不適用于方法和類。如果我們不想序列化特定變量以滿足安全約束,那么我們將該變量聲明為Transient。執行序列化時,JVM會忽略Transient變量的原始值,將默認值保存到文件中。因此Transient意味著不要序列化
(2)靜態變量不屬于對象狀態的一部分,因此它不參與序列化。因此將在靜態變量前添加Transient是無用的。
(3)final變量將直接通過值參與序列化。所以在final變量前添加Transient關鍵字不會產生任何影響。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75514.html
摘要:引語平時我們在運行程序的時候創建的對象都在內存中當程序停止或者中斷了對象也就不復存在了如果我們能將對象保存起來在需要使用它的時候在拿出來使用就好了并且對象的信息要和我們保存時的信息一致序列化就可以解決了這樣的問題序列化當然不止一種方式如下序 引語: ????平時我們在運行程序的時候,創建的對象都在內存中,當程序停止或者中斷了,對象也就不復存在了.如果我們能將對象保存起來,在需要使用它的...
摘要:從的序列化和反序列化說起序列化是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程,而相反的過程就稱為反序列化。當使用接口來進行序列化與反序列化的時候需要開發人員重寫與方法。 從java的序列化和反序列化說起 序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程,而相反的過程就稱為反序列化。 在java中允許我們創建可復用的對象,但是這些對象僅僅存在j...
摘要:把字節序列恢復為對象的過程稱為對象的反序列化。代表對象輸入流,它的方法從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,并將其返回。接口繼承自接口,實現接口的類完全由自身來控制序列化的行為,而僅實現接口的類可以采用默認的序列化方式。 把對象轉換為字節序列的過程稱為對象的序列化。把字節序列恢復為對象的過程稱為對象的反序列化。 對象的序列化主要有兩種用途: 1) 把...
摘要:序列化反序列化主要體現在程序這個過程中,包括網絡和磁盤。如果是開發應用,一般這兩個注解對應的就是序列化和反序列化的操作。協議的處理過程,字節流內部對象,就涉及這兩種序列化。進行第二步操作,也就是序列化和反序列化的核心是。 以下內容,如有問題,煩請指出,謝謝! 對象的序列化/反序列化大家應該都比較熟悉:序列化就是將object轉化為可以傳輸的二進制,反序列化就是將二進制轉化為程序內部的...
摘要:虛擬機讀取其他進程的數據對象的方法可以運行平臺上的其他程序該方法產生一個對象對象代表由該程序啟動啟動的子進程類提供如下三個方法用于和其子進程通信獲取子進程的錯誤流獲取子進程的輸入流獲取子進程的輸出流這里的輸入流輸出流容易混淆從程序的角度思考 Java虛擬機讀取其他進程的數據 Runtime對象的exec方法可以運行平臺上的其他程序,該方法產生一個Process對象,Process對象...
閱讀 1769·2021-10-19 13:30
閱讀 1335·2021-10-14 09:48
閱讀 1530·2021-09-22 15:17
閱讀 2007·2019-08-30 15:52
閱讀 3273·2019-08-30 11:23
閱讀 1983·2019-08-29 15:27
閱讀 887·2019-08-29 13:55
閱讀 753·2019-08-26 14:05