ObjectOutputStream 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 會將 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 |
傳回這個 |
| 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) |
從 |
| Write(Byte[]) |
將 |
| 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) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
| JavaCast<TResult>(IJavaObject) |
ObjectOutputStream 會將 Java 物件的原始資料型態與圖形寫入 OutputStream。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |
| 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。 |