ObjectOutputStream 类

定义

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

[Android.Runtime.Register("java/io/ObjectOutputStream", DoNotGenerateAcw=true)]
public class ObjectOutputStream : Java.IO.OutputStream, IDisposable, Java.Interop.IJavaPeerable, 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();

在序列化和反序列化过程中需要特殊处理的类必须使用以下确切签名实现特殊方法: <>

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 方法或 DataOutput 支持的基元数据类型的方法将单个字段写入 ObjectOutputStream 来保存的。

序列化不会写出不实现 java.io.Serializable 接口的任何对象的字段。 不可序列化的对象子类可以序列化。 在这种情况下,不可序列化的类必须具有 no-arg 构造函数,以允许初始化其字段。 在这种情况下,子类负责保存和还原不可序列化类的状态。 通常,该类的字段可访问(公共、包或受保护),或者有可用于还原状态的 get 和 set 方法。

可以通过实现引发 NotSerializableException 的 writeObject 和 readObject 方法来阻止对象的序列化。 ObjectOutputStream 将捕获异常并中止序列化过程。

通过实现 Externalizable 接口,对象可以假定完全控制对象的序列化表单的内容和格式。 调用 Externalizable 接口 writeExternal 和 readExternal 的方法以保存和还原对象状态。 当由类实现时,他们可以使用 ObjectOutput 和 ObjectInput 的所有方法编写和读取自己的状态。 对象负责处理发生的任何版本控制。

枚举常量的序列化方式与普通可序列化对象或可外部化对象不同。 枚举常量的序列化形式仅包含其名称;不传输常量的字段值。 若要序列化枚举常量,ObjectOutputStream 将写入常量的名称方法返回的字符串。 与其他可序列化或可外部化对象一样,枚举常量可以充当在序列化流中随后出现的后退引用的目标。 无法自定义序列化枚举常量的过程;序列化期间将忽略枚举类型定义的任何特定于类的 writeObject 和 writeReplace 方法。 同样,任何 serialPersistentFields 或 serialVersionUID 字段声明也将被忽略--所有枚举类型都具有固定的 serialVersionUID 为 0L。

基元数据(不包括可序列化字段和可外部化数据)在块数据记录中写入 ObjectOutputStream。 块数据记录由标头和数据组成。 块数据标头由标记和要跟随标头的字节数组成。 连续的基元数据写入将合并到一条块数据记录中。 用于块数据记录的阻塞因子为 1024 字节。 每个块数据记录将填充最多 1024 个字节,或每当终止块数据模式时写入。 调用 ObjectOutputStream 方法 writeObject、defaultWriteObject 和 writeFields 最初终止任何现有的块数据记录。

在 JDK1.1 中添加。

适用于 . 的 java.io.ObjectOutputStreamJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

ObjectOutputStream()

为完全重新实现 ObjectOutputStream 的子类提供一种方法,以便不必分配此 ObjectOutputStream 实现仅使用的私人数据。

ObjectOutputStream(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

ObjectOutputStream(Stream)

创建写入指定 OutputStream 的 ObjectOutputStream。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
JniPeerMembers

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

PeerReference

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

方法

AnnotateClass(Class)

子类可以实现此方法,以允许将类数据存储在流中。

AnnotateProxyClass(Class)

子类可以实现此方法,以将自定义数据存储在流中,以及动态代理类的描述符。

Clone()

创建并返回此对象的副本。

(继承自 Object)
Close()

关闭此输出流并释放与此流关联的任何系统资源。

(继承自 OutputStream)
DefaultWriteObject()

将当前类的非静态和非暂时性字段写入此流。

Dispose()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
Dispose(Boolean)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
Drain()

清空 ObjectOutputStream 中的任何缓冲数据。

EnableReplaceObject(Boolean)

使流能够替换流中的对象。

Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
Flush()

刷新此输出流并强制写出任何缓冲的输出字节。

(继承自 OutputStream)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
PutFields()

检索用于缓冲要写入流的持久字段的对象。

ReplaceObject(Object)

此方法允许 ObjectOutputStream 的受信任子类在序列化期间将一个对象替换为另一个对象。

Reset()

重置将忽略已写入流的任何对象的状态。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
ToArray<T>()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
UseProtocolVersion(ObjectStreamProtocol)

指定写入流时要使用的流协议版本。

Wait()

使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<><

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)
Write(Byte[])

b.length 字节从指定的字节数组写入此输出流。

(继承自 OutputStream)
Write(Byte[], Int32, Int32)

len从从偏移量off开始的指定字节数组写入字节数。

(继承自 OutputStream)
Write(Int32)

写入字节。

WriteAsync(Byte[])

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 OutputStream)
WriteAsync(Byte[], Int32, Int32)

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)

将“unshared”对象写入 ObjectOutputStream。

WriteUTF(String)

此字符串的基元数据以修改后的 UTF-8 格式写入。

显式接口实现

IJavaPeerable.Disposed()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.Finalized()

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

GetJniTypeName(IJavaPeerable)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

WriteAsync(IDataOutput, Byte[])

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

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

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。

WriteShortAsync(IDataOutput, Int32)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

WriteUTFAsync(IDataOutput, String)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

FlushAsync(IFlushable)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

FlushAsync(IObjectOutput)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

WriteObjectAsync(IObjectOutput, Object)

ObjectOutputStream 将 Java 对象的基元数据类型和图形写入 OutputStream。

适用于