語言

ObjectOutputStream 類別

定義

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

[Android.Runtime.Register("java/io/ObjectOutputStream", DoNotGenerateAcw=true)]
public class ObjectOutputStream : Java.IO.OutputStream, IDisposable, Java.IO.IObjectOutput
[<Android.Runtime.Register("java/io/ObjectOutputStream", DoNotGenerateAcw=true)>]
type ObjectOutputStream = class
    inherit OutputStream
    interface IObjectOutput
    interface IDataOutput
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
繼承
ObjectOutputStream
屬性
實作

備註

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。 這些物件可以透過 ObjectInputStream 進行讀取(重組)。 物件的持久儲存可以透過使用串流檔案來實現。 如果串流是網路套接字串流,物件可以在其他主機或其他程序中重建。

只有支援 java.io.Serializable 介面的物件才能寫入串流。 每個可序列化物件的類別會被編碼,包括類別名稱與簽名、物件欄位與陣列的值,以及從初始物件中引用的其他物件的閉包。

writeObject 這個方法用於將物件寫入串流。 任何物件,包括字串和陣列,都是用 writeObject 來撰寫的。 可寫入多個物件或原語至串流。 物件必須從對應的 ObjectInputstream 以相同的類型和順序回讀。

原始資料型別也可以使用 DataOutput 中適當的方法寫入串流。 字串也可以使用 writeUTF 方法來寫入。

物件的預設序列化機制會寫入該物件的類別、類別簽章,以及所有非瞬態和非靜態欄位的值。 對其他物件的引用(暫態或靜態欄位除外)也會使這些物件被寫入。 同一物件的多重參考會透過參考共享機制編碼,使物件的圖形能恢復到原始撰寫時的相同形狀。

例如,要寫一個物件,讓 ObjectInputStream 中的範例能讀取: <br>

FileOutputStream fos = new FileOutputStream("t.tmp");
                 ObjectOutputStream oos = new ObjectOutputStream(fos);

                 oos.writeInt(12345);
                 oos.writeObject("Today");
                 oos.writeObject(new Date());

                 oos.close();

在序列化與反序列化過程中需要特殊處理的類別,必須實作具有以下精確簽名的特殊方法: <br>

private void readObject(java.io.ObjectInputStream stream)
                throws IOException, ClassNotFoundException;
            private void writeObject(java.io.ObjectOutputStream stream)
                throws IOException
            private void readObjectNoData()
                throws ObjectStreamException;

writeObject 方法負責為特定類別撰寫物件的狀態,以便對應的 readObject 方法能還原該物件。 此方法不必關注物件的超類別或子類別所屬的狀態。 狀態可透過使用 writeObject 方法寫入 ObjectOutputStream,或使用 DataOutput 支援的原始資料型別方法來儲存。

序列化不會寫出任何未實作 java.io.Serializable 介面的物件欄位。 無法序列化的物件子類別也可以序列化。 此時,非序列化類別必須有一個 no-arg 建構子,才能讓欄位被初始化。 此時,子類別負責儲存並還原不可序列化類別的狀態。 通常該類別的欄位是可存取的(公開、套件或受保護),或有 get 和 set 方法可用來還原狀態。

可透過實作 writeObject 與 readObject 方法來防止物件序列化,這些方法會拋出 NotSerializableException。 例外會被 ObjectOutputStream 捕捉並中止序列化程序。

實作可外部化介面允許物件完全控制其序列化形式的內容與格式。 外部化介面的方法 writeExternal 和 readExternal 會被呼叫來儲存並還原物件狀態。 當類別實作時,它們可以使用 ObjectOutput 和 ObjectInput 的所有方法來寫入和讀取自己的狀態。 處理任何版本變更的責任由物件負責。

列舉常數的序列化方式與一般可序列化或外部化物件不同。 序列化形式僅包含其名稱;常數的場值不會被傳送。 要序列化一個列舉常數,ObjectOutputStream 會寫入該常數名稱方法回傳的字串。 與其他可序列化或外部化的物件一樣,列舉常數可作為序列化串流中後續出現的回溯參考的目標。 列舉常數序列化的過程無法自訂;在序列化過程中,任何由列舉型別定義的類別專屬 writeObject 與 writeReplace 方法都會被忽略。 同樣地,任何 serialPersistentFields 或 serialVersionUID 欄位宣告也會被忽略——所有列舉型別的 serialVersionUID 固定為 0L。

原始資料(不含可序列化欄位與外部化資料)會以區塊資料記錄寫入 ObjectOutputStream。 區塊資料記錄由標頭和資料組成。 區塊資料標頭由標記和標頭後的位元組數組成。 連續的原始資料寫入會合併成一個區塊資料記錄。 區塊資料記錄所使用的區塊因子為 1024 位元組。 每個區塊資料記錄最多可填充 1024 位元組,或在區塊資料模式終止時寫入。 呼叫 ObjectOutputStream 方法如 writeObject、defaultWriteObject 和 writeFields 會先終止任何現有的區塊資料記錄。

新增於JDK1.1。

Java 文件 java.io.ObjectOutputStream

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
ObjectOutputStream()

提供一種方式,讓正在完全重實作 ObjectOutputStream 的子類別不必分配本實作中剛使用的私有資料。

ObjectOutputStream(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。

ObjectOutputStream(Stream)

建立一個 ObjectOutputStream,寫入指定的 OutputStream。

屬性

名稱 Description
Class

傳回這個 Object的運行時間類別。

(繼承來源 Object)
Handle

基礎Android實例的句柄。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
JniPeerMembers

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

方法

名稱 Description
AnnotateClass(Class)

子類別可能實作此方法,允許類別資料儲存在串流中。

AnnotateProxyClass(Class)

子類別可能會實作此方法,將自訂資料儲存在串流中,並搭配動態代理類別的描述符。

Clone()

建立並傳回這個 對象的複本。

(繼承來源 Object)
Close()

關閉此輸出串流並釋放與此串流相關的系統資源。

(繼承來源 OutputStream)
Construct(JniObjectReference, JniObjectReferenceOptions)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
DefaultWriteObject()

將當前類別的非靜態且非瞬態欄位寫入此串流。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
Drain()

在 ObjectOutputStream 中提取所有緩衝資料。

EnableReplaceObject(Boolean)

啟用串流來替換串流中的物件。

Equals(Object)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
Equals(Object)

指出其他物件是否「等於」這個物件。

(繼承來源 Object)
Flush()

清除該輸出串流,並強制寫出任何緩衝的輸出位元組。

(繼承來源 OutputStream)
GetHashCode()

傳回此物件的雜湊碼值。

(繼承來源 Object)
JavaFinalize()
已淘汰.

當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。

(繼承來源 Object)
Notify()

喚醒正在等候此物件監視器的單一線程。

(繼承來源 Object)
NotifyAll()

喚醒正在等候此物件監視器的所有線程。

(繼承來源 Object)
PutFields()

擷取用於緩衝將寫入串流的持久欄位的物件。

ReplaceObject(Object)

此方法允許 ObjectOutputStream 的受信任子類別在序列化過程中替換一個物件。

Reset()

重置會忽略已經寫入串流中的任何物件的狀態。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
UseProtocolVersion(ObjectStreamProtocol)

在寫入串流時指定串流協定版本。

Wait()

讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<>

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Write(Byte[], Int32, Int32)

len 指定的位元組陣列從偏移 off 量開始寫入該輸出串流的位元組。

(繼承來源 OutputStream)
Write(Byte[])

b.length 指定的位元組陣列寫入該輸出串流。

(繼承來源 OutputStream)
Write(Int32)

寫一個位元組。

WriteAsync(Byte[], Int32, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 OutputStream)
WriteAsync(Byte[])

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 OutputStream)
WriteAsync(Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 OutputStream)
WriteBoolean(Boolean)

寫出布林值。

WriteByte(Int32)

寫入一個 8 位元元組。

WriteBytes(String)

將字串寫入一串位元組。

WriteChar(Int32)

寫入一個 16 位元的字元。

WriteChars(String)

將字串寫成一串字元序列。

WriteClassDescriptor(ObjectStreamClass)

將指定的類別描述符寫入 ObjectOutputStream。

WriteDouble(Double)

寫入一個 64 位元的雙重檔案。

WriteFields()

將緩衝區欄位寫入串流。

WriteFloat(Single)

寫入一個 32 位元浮點數。

WriteInt(Int32)

寫入一個 32 位元的 int。

WriteLong(Int64)

寫入 64 位元長的檔案。

WriteObject(Object)

將指定的物件寫入 ObjectOutputStream。

WriteObjectOverride(Object)

子類別用來覆寫預設 writeObject 方法的方法。

WriteShort(Int32)

寫入一個 16 位元短路。

WriteStreamHeader()

提供 writeStreamHeader 方法,讓子類別能在串流中附加或加接自己的標頭。

WriteUnshared(Object)

會寫入一個「未共享」的物件到 ObjectOutputStream。

WriteUTF(String)

原始資料以修改過的 UTF-8 格式寫入此字串。

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

擴充方法

名稱 Description
FlushAsync(IFlushable)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

FlushAsync(IObjectOutput)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

WriteAsync(IDataOutput, Byte[], Int32, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteAsync(IDataOutput, Byte[])

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteAsync(IDataOutput, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteBooleanAsync(IDataOutput, Boolean)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteByteAsync(IDataOutput, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteBytesAsync(IDataOutput, String)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteCharAsync(IDataOutput, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteCharsAsync(IDataOutput, String)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteDoubleAsync(IDataOutput, Double)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteFloatAsync(IDataOutput, Single)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteIntAsync(IDataOutput, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteLongAsync(IDataOutput, Int64)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteObjectAsync(IObjectOutput, Object)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteShortAsync(IDataOutput, Int32)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

WriteUTFAsync(IDataOutput, String)

ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。

適用於