ObjectInputStream 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。
[Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)]
public class ObjectInputStream : Java.IO.InputStream, IDisposable, Java.Interop.IJavaPeerable, Java.IO.IObjectInput
[<Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)>]
type ObjectInputStream = class
inherit InputStream
interface IObjectInput
interface IDataInput
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 繼承
- 屬性
- 實作
備註
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。
ObjectOutputStream 和 ObjectInputStream 可以分別搭配 FileOutputStream 和 FileInputStream 使用時,為物件的圖形提供持續性儲存體。 ObjectInputStream 可用來復原先前序列化的這些物件。 其他用途包括使用通訊端資料流程或在主機之間傳遞物件,或在遠端通訊系統中封送處理和取消封送處理引數和參數。
ObjectInputStream 可確保從資料流程建立之圖形中所有物件的類型符合 JAVA 虛擬機器中存在的類別。 類別會視需要使用標準機制載入。
只有支援 java.io.Serializable 或 java.io.Externalizable 介面的物件可以從資料流程讀取。
方法 readObject
可用來從資料流程讀取物件。 JAVA 的安全轉型應該用來取得所需的類型。 在 JAVA 中,字串和陣列是物件,而且會在序列化期間視為物件。 讀取時,必須轉換成預期的類型。
基本資料類型可以使用 DataInput 上的適當方法從資料流程讀取。
物件的預設還原序列化機制會將每個欄位的內容還原至值,並在寫入時輸入它。 還原序列化程式會忽略宣告為暫時性或靜態的欄位。 其他物件的參考會視需要從資料流程讀取這些物件。 物件的圖表會使用參考共用機制正確還原。 還原序列化時,一律會配置新的物件,以防止覆寫現有的物件。
讀取物件類似于執行新物件的建構函式。 記憶體會配置給 物件,並初始化為零 (Null) 。 No-arg 建構函式會針對不可序列化的類別叫用,然後從最接近 java.lang.object 的可序列化類別開始,從資料流程還原可序列化類別的欄位,並以物件最特定的類別完成。
例如,從 ObjectOutputStream 中的範例所撰寫的資料流程讀取: < br>
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject();
ois.close();
類別會藉由實作 java.io.Serializable 或 java.io.Externalizable 介面來控制它們序列化的方式。
實作可序列化介面可讓物件序列化儲存和還原物件的整個狀態,並允許類別在寫入資料流程的時間和讀取時間之間演進。 它會自動周遊物件之間的參考,並儲存和還原整個圖形。
序列化和還原序列化程式期間需要特殊處理的可序列化類別應該實作下列方法:
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
readObject 方法負責使用對應 writeObject 方法寫入資料流程的資料,讀取和還原其特定類別的物件狀態。 方法不需要擔心屬於其超級類別或子類別的狀態。 從 ObjectInputStream 讀取個別欄位的資料,並指派給物件的適當欄位,以還原狀態。 DataInput 支援讀取基本資料類型。
任何嘗試讀取超過對應 writeObject 方法所寫入之自訂資料界限的物件資料,都會擲回 OptionalDataException,且 eof 域值為 true。 超過配置資料結尾的非物件讀取會以表示資料流程結尾的相同方式反映資料結束:位元組讀取會傳回 -1 做為位元組讀取或讀取的位元組數目,而基本讀取將會擲回 EOFExceptions。 如果沒有對應的 writeObject 方法,則預設序列化資料的結尾會標示分配資料的結尾。
從 readExternal 方法內發出的基本和物件讀取呼叫的行為相同--如果資料流程已經位於對應 writeExternal 方法所寫入的資料結尾,則物件讀取會擲回 OptionalDataExceptions,且 eof 設定為 true,位元組讀取會傳回 -1,而基本讀取則會擲回 EOFExceptions。 請注意,此行為不會保留使用舊 ObjectStreamConstants.PROTOCOL_VERSION_1
通訊協定所寫入的資料流程,其中 writeExternal 方法所寫入的資料結尾不會經過分類,因此無法偵測到。
readObjectNoData 方法負責在序列化資料流程未將給定類別列為要還原序列化之物件的超類別時,初始化物件的狀態。 當接收者使用與傳送者不同的還原序列化實例類別版本,而接收者的版本會擴充傳送者版本未延伸的類別時,就可能發生此情況。 如果序列化資料流程遭到竄改,也可能會發生此情況;因此,readObjectNoData 在初始化還原序列化物件時很有用,儘管有「惡意」或不完整的來來源資料流。
序列化不會讀取或指派值給任何未實作 java.io.Serializable 介面的物件欄位。 無法序列化之物件的子類別可以序列化。 在此情況下,不可序列化的類別必須具有 no-arg 建構函式,以允許初始化其欄位。 在此情況下,子類別必須負責儲存和還原不可序列化類別的狀態。 通常,該類別的欄位可以存取 (公用、封裝或受保護的) ,或是有可用來還原狀態的取得和設定方法。
還原序列化物件時發生的任何例外狀況,都會由 ObjectInputStream 攔截並中止讀取程式。
實作 Externalizable 介面可讓物件假設完全控制物件序列化表單的內容和格式。 呼叫 Externalizable 介面 writeExternal 和 readExternal 的方法,以儲存和還原物件狀態。 當類別實作時,他們可以使用 ObjectOutput 和 ObjectInput 的所有方法來寫入和讀取自己的狀態。 物件負責處理發生的任何版本設定。
列舉常數的還原序列化方式與一般可序列化或外部化物件不同。 列舉常數的序列化形式只由其名稱所組成;不會傳輸常數的域值。 若要還原序列化列舉常數,ObjectInputStream 會從資料流程讀取常數名稱;然後,使用列舉常數的基底型別和接收的常數名稱作為引數呼叫靜態方法 Enum.valueOf(Class, String)
,即可取得還原序列化常數。 如同其他可序列化或可外部化的物件,列舉常數可以做為後續出現在序列化資料流程中之反向參考的目標。 無法自訂還原序列化列舉常數的程式:還原序列化期間會忽略任何類別特定的 readObject、readObjectNoData 和 readResolve 方法。 同樣地,也會忽略任何 serialPersistentFields 或 serialVersionUID 欄位宣告--所有列舉類型都有固定的 serialVersionUID 為 0L。
已在 JDK1.1 中新增。
的 java.io.ObjectInputStream
JAVA 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據中所述的詞彙使用。
建構函式
ObjectInputStream() |
為完全重新實作 ObjectInputStream 的子類別提供一種方式,讓您不必配置這個 ObjectInputStream 實作所使用的私用資料。 |
ObjectInputStream(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 標記法時所使用的建構函式;由執行時間呼叫。 |
ObjectInputStream(Stream) |
建立從指定的 InputStream 讀取的 ObjectInputStream。 |
屬性
Class |
傳回這個 |
Handle |
基礎 Android 實例的控制碼。 (繼承來源 Object) |
JniIdentityHashCode |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
JniPeerMembers |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
PeerReference |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
ThresholdClass |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
ThresholdType |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
方法
Available() |
傳回可從此輸入資料流程讀取 (或略過) 位元組數目的估計值,這在偵測到資料流程結束時可能是 0 或 0。 (繼承來源 InputStream) |
Clone() |
建立並傳回這個 物件的複本。 (繼承來源 Object) |
Close() |
關閉此輸入資料流程,並釋放與資料流程相關聯的任何系統資源。 (繼承來源 InputStream) |
DefaultReadObject() |
從這個資料流程讀取目前類別的非靜態和非暫時性欄位。 |
Dispose() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
Dispose(Boolean) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
EnableResolveObject(Boolean) |
啟用資料流程,以允許從資料流程讀取的物件被取代。 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
JavaFinalize() |
當垃圾收集判斷物件沒有其他參考時,由物件上的垃圾收集行程呼叫。 (繼承來源 Object) |
Mark(Int32) |
標記這個輸入資料流程中的目前位置。 (繼承來源 InputStream) |
MarkSupported() |
測試此輸入資料流程是否支援 |
Notify() |
喚醒正在等候此物件的監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
Read() |
讀取資料位元組。 |
Read(Byte[]) |
從輸入資料流程讀取一些位元組數目,並將其儲存到緩衝區陣列 |
Read(Byte[], Int32, Int32) |
將最多位元組 |
ReadAllBytes() |
從輸入資料流程讀取所有剩餘的位元組。 (繼承來源 InputStream) |
ReadAsync() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 InputStream) |
ReadAsync(Byte[]) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 InputStream) |
ReadAsync(Byte[], Int32, Int32) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 InputStream) |
ReadBoolean() |
以布林值讀取。 |
ReadByte() |
讀取 8 位位元組。 |
ReadChar() |
讀取 16 位字元。 |
ReadClassDescriptor() |
從序列化資料流程讀取類別描述元。 |
ReadDouble() |
讀取 64 位雙精度浮點數。 |
ReadFields() |
從資料流程讀取永續性欄位,並依名稱提供這些欄位。 |
ReadFloat() |
讀取 32 位浮點數。 |
ReadFully(Byte[]) |
讀取位元組,封鎖直到讀取所有位元組為止。 |
ReadFully(Byte[], Int32, Int32) |
讀取位元組,封鎖直到讀取所有位元組為止。 |
ReadInt() |
讀取 32 位 int。 |
ReadLine() |
已淘汰.
讀取已由 \n、\r、\r\n 或 EOF 終止的行。 |
ReadLong() |
讀取 64 位長。 |
ReadNBytes(Byte[], Int32, Int32) |
將輸入資料流程中要求的位元組數目讀取到指定的位元組陣列。 (繼承來源 InputStream) |
ReadNBytes(Int32) |
從輸入資料流程讀取最多指定的位元組數目。 (繼承來源 InputStream) |
ReadObject() |
從 ObjectInputStream 讀取物件。 |
ReadObjectOverride() |
這個方法是由 ObjectOutputStream 的受信任子類別所呼叫,該子類別會使用受保護的 no-arg 建構函式來建構 ObjectOutputStream。 |
ReadShort() |
讀取 16 位短。 |
ReadStreamHeader() |
提供 readStreamHeader 方法,以允許子類別讀取並驗證自己的資料流程標頭。 |
ReadUnshared() |
從 ObjectInputStream 讀取 「unshared」 物件。 |
ReadUnsignedByte() |
讀取未帶正負號的 8 位位元組。 |
ReadUnsignedShort() |
讀取不帶正負號的 16 位短。 |
ReadUTF() |
讀取已修改 UTF-8 格式的字串。 |
RegisterValidation(IObjectInputValidation, Int32) |
在傳回圖形之前註冊要驗證的物件。 |
Reset() |
在此輸入資料流程上呼叫 方法時 |
ResolveClass(ObjectStreamClass) |
載入與指定資料流程類別描述相等的本機類別。 |
ResolveObject(Object) |
這個方法可讓 ObjectInputStream 的信任子類別在還原序列化期間,以另一個物件取代另一個物件。 |
ResolveProxyClass(String[]) |
傳回 Proxy 類別,這個類別會實作 Proxy 類別描述元中名為 的介面;子類別可以實作這個方法,以讀取資料流程中的自訂資料,以及動態 Proxy 類別的描述項,讓他們能夠使用介面和 Proxy 類別的替代載入機制。 |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
Skip(Int64) |
略過並捨棄 |
SkipAsync(Int64) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 InputStream) |
SkipBytes(Int32) |
略過位元組。 |
SkipNBytes(Int64) |
略過並捨棄來自這個輸入資料流程的資料位元組 |
ToArray<T>() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
TransferTo(Stream) |
從這個輸入資料流程讀取所有位元組,並以讀取的順序,將位元組寫入指定的輸出資料流程。 (繼承來源 InputStream) |
UnregisterFromRuntime() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
Wait() |
讓目前的執行緒等到喚醒為止,通常是藉由 < em > notified < /em > 或 < em > interrupted < /em > 來喚醒。 (繼承來源 Object) |
Wait(Int64) |
讓目前的執行緒等到喚醒為止,通常是 < 透過 em > notified < /em 或 em > interrupted < /em >> ,或 < 直到經過一定數量的即時為止。 (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的執行緒等到喚醒為止,通常是 < 透過 em > notified < /em 或 em > interrupted < /em >> ,或 < 直到經過一定數量的即時為止。 (繼承來源 Object) |
明確介面實作
IJavaPeerable.Disposed() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
GetJniTypeName(IJavaPeerable) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadBooleanAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadByteAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadCharAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadDoubleAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadFloatAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadFullyAsync(IDataInput, Byte[]) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadFullyAsync(IDataInput, Byte[], Int32, Int32) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadIntAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadLineAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadLongAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadShortAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadUnsignedByteAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadUnsignedShortAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadUTFAsync(IDataInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
SkipBytesAsync(IDataInput, Int32) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadAsync(IObjectInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadAsync(IObjectInput, Byte[]) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadAsync(IObjectInput, Byte[], Int32, Int32) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
ReadObjectAsync(IObjectInput) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |
SkipAsync(IObjectInput, Int64) |
ObjectInputStream 會還原序列化先前使用 ObjectOutputStream 撰寫的基本資料和物件。 |