Java序列化之readObjectNoData、readResolve方法
資料地址:http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/input.html#5903、
①:
private void readObjectNoData() throws ObjectStreamException;
Serializable物件反序列化時,由於序列化與反序列化提供的class版本不同,序列化的class的super class不同於序列化時的class的super class;或者收到有敵意的流;或接收不完整;都會對初始化物件欄位值時造成影響。
每個Serializable class都應該定義自己的readObjectNoData方法。如果發生以上情況時,沒有定義readObjectNoData方法時,類的欄位就會初始化成它們的預設值(列在section 4.5.5 of The JavaTM Language Specification, Second Edition)。這種行為在版本1.4 of the JavaTM 2 SDK支援readObjectNoData方法之後是固定的。
當出現上面的情況時,readObjectNoData會取代readObject的呼叫。
②:
ANY-ACCESS-MODIFIER Object readResolve()
throws ObjectStreamException;
對於Serializable and Externalizable classes,方法readResolve允許class在反序列化返回物件前替換、解析在流中讀出來的物件。實現readResolve方法,一個class可以直接控制反序化返回的型別和物件引用。
方法readResolve會在ObjectInputStream已經讀取一個物件並在準備返回前呼叫。ObjectInputStream 會檢查物件的class是否定義了readResolve方法。如果定義了,將由readResolve方法指定返回的物件。返回物件的型別一定要是相容的,否則會丟擲ClassCastException 。
轉自:http://vyloy.iteye.com/blog/1240663
相關推薦
Java序列化之readObjectNoData、readResolve方法
資料地址:http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/input.html#5903、 ①: private void readObjectNoData() throws ObjectS
Java序列化的方式、object類中的方法、介面和抽象類的區別、ArrayList在迴圈過程中刪除
Java序列化的方式 a.是相應的物件實現了序列化介面Serializable,這個使用的比較多,對於序列化介面Serializable介面是一個空的介面,它的主要作用就是標識這個物件時可序列化的,jre物件在傳輸物件的時候會進行相關的封裝。 b.Externlizab
Java 序列化之transient關鍵字
1. transient的作用及使用方法 我們都知道一個物件只要實現了Serilizable介面,這個物件就可以被序列化,java的這種序列化模式為開發者提供了很多便利,我們可以不必關係具體序列化的過程,只要這個類實現了Serilizable介面,這個類的所有屬性和方法都會自動序列化。 然而
單例模式的序列化與反序列化實現需要實現readResolve()方法
package com.linruby.singleton; import java.io.Serializable; public class SingletonObject implements Serializable { private static final Singleto
[Java] 序列化之基本認識
一、簡介 Java 序列化即將 Java 物件轉換為二進位制序列的過程,主要用於網路通訊、持久化儲存。 二、實現方式 Serializable Java 中實現 Serializable 介面即可實現序列化。 Externalizable Serializabl
Java序列化之排除被序列化欄位(transient/靜態變數)
我們都知道一個物件只要實現了Serilizable介面,這個物件就可以被序列化,java的這種序列化模式為開發者提供了很多便利,我們可以不必關係具體序列化的過程,只要這個類實現了Serilizable介面,這個類的所有屬性和方法都會自動序列化。 然而在實際
JAVA序列化之RMI遠端呼叫
RMI(Remote Method Invocation)是Java中的遠端過程呼叫(Remote Procedure Call,RPC)實現,是一種分散式Java應用的實現方式。它的目的在於對開發人員遮蔽橫跨不同JVM和網路連線等細節,使得分佈在不同JVM上的
JAVA對象序列化(Serializable、ObjectOutputStream、ObjectInputStream、 transient)
nbsp 輸出流 out void hang this 對象 code ransient 1)對象序列化是把一個對象變為二進制的數據流的一種方法。對象序列化後可以方便的實現對象的傳輸或存儲。 2)如果一個類的對象想被序列化,則對象所在的類必須實現Serialilzable接
序列化之Java默認序列化技術(ObjectOutputStream與ObjectInputStream)
object java outputstream Java默認序列化技術 主要是通過對象輸出流java.io.ObjectOutputStream對象輸入流java.io.ObjectInputStream來實現的 package com.xingej.ser; public
【轉】Python之數據序列化(json、pickle、shelve)
大數 保密 不兼容 air shelf pickle 優點 訪問問題 josn 【轉】Python之數據序列化(json、pickle、shelve) 本節內容 前言 json模塊 pickle模塊 shelve模塊 總結 一、前言 1. 現
Java序列化——Serializable、Externalizable原始碼閱讀與總結
序列化(Serialization):是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。更通俗地講,是將該物件欄位和狀態資訊以位元組流的方式輸出到目的地。 一是實現pojo物件的讀寫操作,將每個物件轉換為位元組流,而這些位元組流可以被持久化到裝置上,再次讀取時會將位元組流
Java反射之getFields()、getDeclaredFields()方法
在Java開發中,有兩種獲取欄位的方式:getFields()和getDeclaredFields()。 兩者區別: getFields():獲取某個類的所有的公共(public)的欄位,包括父類中的欄位 getDeclaredFields():獲取某個類的所有宣告的欄位,即包括publ
JAVA小白的進擊之路!!!2018.11.05日 關於java序列化的那些事
2018.11.05 序列化:把物件轉換為位元組序列 反序列換:把在位元組序列轉換為物件 用途:1、把物件的位元組序列永久的儲存在硬碟中,通常存放在一個檔案中。 2、在網路上傳送物件的位元組序列 案例:web伺服器中的session物件,當有10萬用戶併發
Java IO: 序列化與ObjectInputStream、ObjectOutputStream
作者:Jakob Jenkov 譯者: 李璟([email protected]) 本小節會簡要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream。 Serializable 原文連結 如果你希望類能夠序列化
java(三)物件的序列化與static、final關鍵字
Java序列化是指把Java物件轉換為位元組序列的過程;而Java反序列化是指把位元組序列恢復為Java物件的過程。java中存有Cloneable介面,實現此介面的類都具有被拷貝能力,比new一個物件
Java反序列化之Jackson-databind
這個洞的cve編號:CVE-2017-17485,漏洞環境就如第一個連結那樣,jdk需要在jdk 1.8以上。 先看一下Jackson-databind的用法,說白了就是將json轉換成物件。 test-legit.json程式碼如下 {"id":123} 執行結果如圖: 如果注入的json程式碼如下程
Java-序列化、持久化和壓縮
1. 序列化的作用 將物件變成一串位元組流 不用序列化能否儲存磁碟上? 可以,但是你要將物件中一個個的基本屬性進行寫入操作,比如int之流, 當然, 按你自己希望的順序,. 序列化和持久化之間的關係 序列化過程是持久化的一種方式,當然
Json反序列化之ObjectMapper(自定義實現反序列化方法)
對於伺服器端開發人員而言,呼叫第三方介面獲取資料,將其“代理”轉化並返給客戶端幾乎是家常便飯的事兒。 一般情況下,第三方介面返回的資料型別是json格式,而伺服器開發人員則需將json格式的資料轉換成物件,繼而對其進行處理並封裝,以返回給客戶端。
Java序列化與ProtocalBuffer序列化之深入分析(轉)
今天看了《Java序列化與ProtocalBuffer序列化之深入分析》,感覺有所收穫。原文中對ObjectStreamField中關於屬性型別與字元表示的對映沒有指出來,在原帖中回覆了作者,這裡稍作修改並轉發。 從一個簡單物件的序列化內容來看java序列化與ProtocalBuffer序列化機制的
C#中的序列化和反序列化是什麼、有什麼作用、使用方法詳解
什麼是序列化與反序列化??? 序列化和反序列化,我們可能經常會聽到,其實通俗一點的解釋,序列化就是把一個物件儲存到一個檔案或資料庫欄位中去,反序列化就是在適當的時候把這個檔案再轉化成原來的物件使用。 當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種