public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
只有对象支持java.io.serializable接口可以写入流。每个序列化对象的类是编码包括的类的名称和签名的对象的字段和数组的值,和任何其他对象引用的对象从最初的封闭。
该方法是使用writeObject写一个对象流。任何物体,包括字符串和数组,用writeObject。可以将多个对象或原语写入流中。对象必须具有相同的类型对应的对象输入流中读出,以相同的顺序为他们写的。
原始数据类型也可以用适当的方法利用数据流。字符串也可以用writeutf方法。
对象的默认序列化机制写入对象的类、类签名和所有非瞬态和非静态字段的值。对其他对象的引用(除了在瞬态或静态字段),导致这些对象也被写入。多个引用到一个单一的对象进行编码使用参考共享机制,使图形的对象可以恢复到相同的形状,当原来的书面。
例如,可以读写的例子,在ObjectInputStream的一个目标:
FileOutputStream FOS =新FileOutputStream(“t.tmp”);ObjectOutputStream OOS =新对象(FOS);(12345)writeint缺货;OOS writeObject(“今天”);OOS writeObject(新());缺货。();
类,需要特殊处理的序列化和反序列化过程中必须用特殊方法在实施这些具体的签名:
private void readObject(java.io.objectinputstream流)抛出IOException,时抛出;private void writeObject(java.io.objectoutputstream流)抛出IOExceptionprivate void readobjectnodata()把objectstreamexception;
writeObject方法负责写作对象的状态为其特定的类,相应的readObject方法可以恢复。该方法不需要担心自己属于对象的超类或子类的状态。国家通过写个人领域使用writeObject方法或使用的方法对原始数据类型支持的数据对象的保存。
序列化不写任何对象,没有实现java.io.serializable接口等。那是不可序列化对象的子类可以被序列化。在这种情况下,不可序列化的类必须有一个无参数构造函数允许字段被初始化。在这种情况下,它的子类来保存和恢复的非序列化类的国家责任。它经常是这样的情况下,该类的字段是可访问的(公共,包或保护),或有得到和设置方法,可以用来恢复状态。
一个对象序列化可以实现writeObject和readObject方法,把notserializableexception阻止。例外将被对象和中止序列化过程。
实现Externalizable接口允许对象的假设和对象的序列化格式的内容完全控制。Externalizable接口的方法,readexternal writeExternal和,被称为保存和恢复对象的状态。由类实现时他们可以编写和使用所有的objectoutput和objectinput方法读自己的状态。它是对象的责任来处理出现的任何版本。
枚举常量是不同于普通的序列化序列化或外部对象。一个枚举常量的序列化形式由其名称;的恒值不能被发送。序列化一个枚举常量,ObjectOutputStream写的字符串常量的名称的方法返回。像其他序列化或外部对象,枚举常量可以作为反向引用的出现,随后在序列化流目标。通过枚举常量不能定制序列化的过程;任何特定类的writeObject和writereplace方法枚举类型定义被忽略在序列化期间。同样,任何serialpersistentfields serialVersionUID字段声明或忽视了所有枚举类型有一个固定的serialVersionUID 0L。
原始数据,不包括序列化字段和外部的数据,写入块数据记录的对象。一个块数据记录是由一个头和数据。块数据头由一个标记和字节数按照标题。连续的原始数据写入被合并成一个块数据记录。用于块数据记录的阻塞因子将是1024个字节。每个块数据记录将被填充到1024个字节,或被写入时,有一个块数据模式终止。调用对象的方法和writefields writeObject,defaultwriteobject最初终止任何现有的数据块记录。
Modifier and Type | Class and Description |
---|---|
static class |
ObjectOutputStream.PutField
提供编程访问持久性字段写入objectoutput。
|
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
Modifier | Constructor and Description |
---|---|
protected |
ObjectOutputStream()
提供完全重新实现的子类对象不需要分配的私有数据只是用于实现对象的方式。
|
|
ObjectOutputStream(OutputStream out)
创建一个对象写入到指定的输出流。
|
Modifier and Type | Method and Description |
---|---|
protected void |
annotateClass(类<?> cl)
子类可以实现这种方法,以允许将类数据存储在流中。
|
protected void |
annotateProxyClass(类<?> cl)
子类可以实现这种方法来存储流中的自定义数据以及动态代理类的描述符。
|
void |
close()
关闭流。
|
void |
defaultWriteObject()
将当前类的非静态和非瞬态字段写入该流。
|
protected void |
drain()
在ObjectOutputStream的任何缓冲的数据流失。
|
protected boolean |
enableReplaceObject(boolean enable)
使流能够替换流中的对象。
|
void |
flush()
冲流。
|
ObjectOutputStream.PutField |
putFields()
检索用于将要写入流的缓冲持久字段的对象。
|
protected Object |
replaceObject(Object obj)
这种方法将允许受信任的子类对象来代替一个物体对另一个序列化期间。
|
void |
reset()
重置将忽略已写入流的任何对象的状态。
|
void |
useProtocolVersion(int version)
在写入流时指定要使用的流协议版本。
|
void |
write(byte[] buf)
写入一个字节数组。
|
void |
write(byte[] buf, int off, int len)
写入字节数组的字节数。
|
void |
write(int val)
写一个字节。
|
void |
writeBoolean(boolean val)
写一个布尔值。
|
void |
writeByte(int val)
写入一个8位字节。
|
void |
writeBytes(String str)
写入字符串作为一个字节序列。
|
void |
writeChar(int val)
写入一个16位字符。
|
void |
writeChars(String str)
写一个字符串作为字符序列。
|
protected void |
writeClassDescriptor(ObjectStreamClass desc)
写入指定的类描述的对象。
|
void |
writeDouble(double val)
写一个64位双。
|
void |
writeFields()
将缓冲区写到流中。
|
void |
writeFloat(float val)
写一个32位浮点。
|
void |
writeInt(int val)
将32位int。
|
void |
writeLong(long val)
写一个64位长的。
|
void |
writeObject(Object obj)
写入指定的对象的对象。
|
protected void |
writeObjectOverride(Object obj)
用子类重写默认的writeObject方法。
|
void |
writeShort(int val)
写一个16位的短。
|
protected void |
writeStreamHeader()
的writestreamheader方法提供子类可以附加或在自己的头的流。
|
void |
writeUnshared(Object obj)
写一个“独享”的对象的对象。
|
void |
writeUTF(String str)
原始数据写在
modified UTF-8格式字符串。
|
public ObjectOutputStream(OutputStream out) throws IOException
如果安装了安全管理器,该构造函数将检查“enablesubclassimplementation”时,直接或间接地通过调用子类覆盖objectoutputstream.putfields objectoutputstream.writeunshared方法或构造函数serializablepermission。
out
输出流写入
IOException
-如果在写流头发生I/O错误
SecurityException
非法安全敏感的方法
null
out
NullPointerException
ObjectOutputStream()
,
putFields()
,
ObjectInputStream.ObjectInputStream(InputStream)
protected ObjectOutputStream() throws IOException, SecurityException
如果存在安全管理器安装,这种方法首先调用一个SerializablePermission("enableSubclassImplementation")
权限以确保可以使子类化安全管理的checkPermission
方法。
SecurityException
-如果存在一个安全管理及其
checkPermission
否认使子类化方法。
IOException
-如果在创建此流发生I/O错误
SecurityManager.checkPermission(java.security.Permission)
,
SerializablePermission
public void useProtocolVersion(int version) throws IOException
此例程提供了一个钩子,使当前版本的序列化以一种向后兼容的格式写在流格式的前一个版本中。
我们将尽一切努力避免引入额外的向后兼容;然而,有时没有其他选择。
version
从java.io.objectstreamconstants使用版本。
IllegalStateException
-如果任何对象被序列化为后。
IllegalArgumentException
如果无效的版本是通过。
IOException
如果I/O错误发生
ObjectStreamConstants.PROTOCOL_VERSION_1
,
ObjectStreamConstants.PROTOCOL_VERSION_2
public final void writeObject(Object obj) throws IOException
抛出异常与OutputStream类问题和不可序列化。所有的异常都是到OutputStream是致命的,这是一个不确定的状态离开,并由调用方忽略或恢复流的状态。
writeObject
接口
ObjectOutput
obj
-要写入的对象
InvalidClassException
-什么是一个用于序列化类错。
NotSerializableException
一些对象被序列化并没有落实java.io.serializable接口。
IOException
任何例外的OutputStream扔。
protected void writeObjectOverride(Object obj) throws IOException
obj
对象被写入基础流
IOException
-如果有I/O错误写入基础流
ObjectOutputStream()
,
writeObject(Object)
public void writeUnshared(Object obj) throws IOException
对象的子类重写此方法只能在安全领域中具有“enablesubclassimplementation”serializablepermission构造;任何试图实例化子类无此权限会导致引发SecurityException。
obj
对象写入流
NotSerializableException
-如果图形中的对象进行序列化不实现Serializable接口
InvalidClassException
-如果存在问题和对象的类序列化
IOException
-如果在序列化期间发生I/O错误
public void defaultWriteObject() throws IOException
IOException
如果I/O错误发生而写作的基本
OutputStream
public ObjectOutputStream.PutField putFields() throws IOException
IOException
如果I/O错误发生
public void writeFields() throws IOException
IOException
如果I/O错误发生在写入基础流
NotActiveException
writeObject方法不被称为对象的状态写。
public void reset() throws IOException
IOException
调用,序列化一个对象。
protected void annotateClass(类<?> cl) throws IOException
cl
-类注释自定义数据
IOException
任何例外的OutputStream扔。
protected void annotateProxyClass(类<?> cl) throws IOException
这种方法在流中的每一个唯一的代理类描述符被调用一次。在ObjectOutputStream
此方法的默认实现不执行任何操作。
在ObjectInputStream
对应的方法是resolveProxyClass
。对于一个给定的ObjectOutputStream
重写此方法的子类,在子类ObjectInputStream
相应的resolveProxyClass
方法必须读取任何数据或对象所写的annotateProxyClass
。
cl
-代理类注释自定义数据
IOException
任何例外的基本
OutputStream
扔
ObjectInputStream.resolveProxyClass(String[])
protected Object replaceObject(Object obj) throws IOException
的objectoutputstream.writeobject方法以对象类型的参数(而不是类型序列化)允许的情况下,非序列化的对象是可序列化的取代。
当一个类对象必须确保替代或互补代换必须在反序列化期间或取代的对象是兼容的各个领域,将参考存储。类型不是字段或数组元素的类型的子类的对象通过引发异常中止序列化,而对象是不被存储的。
此方法仅在第一次遇到每个对象时调用一次。所有后续对该对象的引用将被重定向到新的对象。此方法应返回被替换的对象或原始对象。
零可以作为可替代的对象返回,但可能因为他们可以期待一个对象而不是空导致包含引用的原始对象类NullReferenceException。
obj
要替换的对象
IOException
任何例外的OutputStream扔。
protected boolean enableReplaceObject(boolean enable) throws SecurityException
如果enable
是真实的,并有一个安全管理安装,这种方法首先调用一个SerializablePermission("enableSubstitution")
权限以确保可以使流在流做置换对象的安全经理的checkPermission
方法。
enable
-布尔参数使替换对象
SecurityException
-如果存在一个安全管理及其
checkPermission
方法拒绝使流在流做替代物。
SecurityManager.checkPermission(java.security.Permission)
,
SerializablePermission
protected void writeStreamHeader() throws IOException
IOException
如果I/O错误发生在写入基础流
protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException
readClassDescriptor
,应该重写重组类描述符从自定义流表示。默认情况下,该方法根据对象序列化规范中定义的格式写类描述符。
注意,这种方法只会如果不使用旧的对象序列化流格式(通过调用对象的useProtocolVersion
法)。如果序列化流是使用旧格式(PROTOCOL_VERSION_1
),类描述符将被写在一个方法不能被重写或定制。
desc
类描述符写入该流
IOException
如果发生I/O错误。
ObjectInputStream.readClassDescriptor()
,
useProtocolVersion(int)
,
ObjectStreamConstants.PROTOCOL_VERSION_1
public void write(int val) throws IOException
write
接口
DataOutput
write
接口
ObjectOutput
write
方法重写,继承类
OutputStream
val
的字节被写入到流
IOException
如果发生I/O错误。
public void write(byte[] buf) throws IOException
write
接口
DataOutput
write
接口
ObjectOutput
write
方法重写,继承类
OutputStream
buf
-要写入的数据
IOException
如果发生I/O错误。
OutputStream.write(byte[], int, int)
public void write(byte[] buf, int off, int len) throws IOException
write
接口
DataOutput
write
接口
ObjectOutput
write
方法重写,继承类
OutputStream
buf
-要写入的数据
off
的起始偏移量的数据
len
-字节写数
IOException
如果发生I/O错误。
public void flush() throws IOException
flush
接口
Flushable
flush
接口
ObjectOutput
flush
方法重写,继承类
OutputStream
IOException
如果发生I/O错误。
protected void drain() throws IOException
IOException
如果I/O错误发生在写入基础流
public void close() throws IOException
close
接口
Closeable
close
接口
ObjectOutput
close
接口
AutoCloseable
close
方法重写,继承类
OutputStream
IOException
如果发生I/O错误。
public void writeBoolean(boolean val) throws IOException
writeBoolean
接口
DataOutput
val
-布尔写的
IOException
如果I/O错误发生在写入基础流
public void writeByte(int val) throws IOException
writeByte
接口
DataOutput
val
-要写入的字节值
IOException
如果I/O错误发生在写入基础流
public void writeShort(int val) throws IOException
writeShort
接口
DataOutput
val
-写短的价值
IOException
如果I/O错误发生在写入基础流
public void writeChar(int val) throws IOException
writeChar
接口
DataOutput
val
-要写入的字符值
IOException
如果I/O错误发生在写入基础流
public void writeInt(int val) throws IOException
writeInt
接口
DataOutput
val
-要写入的整数
IOException
如果I/O错误发生在写入基础流
public void writeLong(long val) throws IOException
writeLong
接口
DataOutput
val
-要写长值
IOException
如果I/O错误发生在写入基础流
public void writeFloat(float val) throws IOException
writeFloat
接口
DataOutput
val
-被写入浮点值
IOException
如果I/O错误发生在写入基础流
public void writeDouble(double val) throws IOException
writeDouble
接口
DataOutput
val
-要写入的双重价值
IOException
如果I/O错误发生在写入基础流
public void writeBytes(String str) throws IOException
writeBytes
接口
DataOutput
str
-字节被写入字符串
IOException
如果I/O错误发生在写入基础流
public void writeChars(String str) throws IOException
writeChars
接口
DataOutput
str
-焦要写入的字符串
IOException
如果I/O错误发生在写入基础流
public void writeUTF(String str) throws IOException
writeUTF
接口
DataOutput
str
-要写入的字符串
IOException
如果I/O错误发生在写入基础流
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.