java IO流之对象流ObjectInputStream ObjectInputStream Serializable
对象流:用于存储和读取基本数据类型数据或对象的处理流。
它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
序列化和反序列化:
ObjectOutputStream 类 : 把内存中的Java对象转换成平台无关的二进制数据,从而允许把这种二进制数据持久地保存在磁盘上,或通过网络将这种二进制数据传输到另一个网络节点。序列化
ObjectInputStream类 : 当其它程序获取了这种二进制数据,就可以恢复成原来的Java对象。反序列化
ObjectOutputStream
- ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
- 只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。
- writeObject 方法用于将对象写入流中。所有对象(包括 String 和数组)都可以通过 writeObject 写入。可将多个对象或基元写入流中。必须使用与写入对象时相同的类型和顺序从相应 ObjectInputstream 中读回对象。 还可以使用 DataOutput 中的适当方法将基本数据类型写入流中。还可以使用 writeUTF 方法写入字符串。
- 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。其他对象的引用(瞬态和静态字段除外)也会导致写入那些对象。可使用引用共享机制对单个对象的多个引用进行编码,这样即可将对象的图形恢复为最初写入它们时的形状。
例如,要写入可通过 ObjectInputStream 中的示例读取的对象,请执行以下操作:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
构造方法摘要
- protected ObjectOutputStream()
- 为完全重新实现 ObjectOutputStream 的子类提供一种方法,让它不必分配仅由 ObjectOutputStream 的实现使用的私有数据。
- ObjectOutputStream(OutputStream out)
- 创建写入指定 OutputStream 的 ObjectOutputStream。
方法
Modifier and Type | Method | Description |
---|---|---|
protected void | annotateClass(Class<?> cl) | 子类可以实现此方法,从而允许在流中存储类数据。 |
protected void | annotateProxyClass(Class<?> cl) | 子类可以实现此方法,从而在流中存储定制数据和动态代理类的描述符。 |
void | close() | 关闭流。 |
void | defaultWriteObject() | 将当前类的非静态和非瞬态字段写入此流。 |
protected void | drain() | 排空 ObjectOutputStream 中的所有已缓冲数据。 |
void | flush() | 刷新该流的缓冲。 |
protected Object | replaceObject(Object obj) | 在序列化期间,此方法允许 ObjectOutputStream 的受信任子类使用一个对象替代另一个对象。 |
void | reset() | 重置将丢弃已写入流中的所有对象的状态。 |
void | useProtocolVersion(int version) | 指定要在写入流时使用的流协议版本。 |
void | write(byte[] buf) | 写入一个 byte 数组。 |
void | write(byte[] buf, int off, int len) | 写入字节的子数组。 |
void | write(int val) | 写入一个字节。 |
void | writeBoolean(boolean val) | 写入一个 boolean 值。 |
void | writeByte(int val) | 写入一个 8 位字节。 |
void | writeBytes(String str) | 以字节序列形式写入一个 String。 |
void | writeChar(int val) | 写入一个 16 位的 char 值。 |
void | writeChars(String str) | 以 char 序列形式写入一个 String。 |
void | writeDouble(double val) | 写入一个 64 位的 double 值。 |
void | writeFields() | 将已缓冲的字段写入流中。 |
void | writeFloat(float val) | 写入一个 32 位的 float 值。 |
void | writeInt(int val) | 写入一个 32 位的 int 值。 |
void | writeLong(long val) | 写入一个 64 位的 long 值。 |
void | writeObject(Object obj) | 将指定的对象写入 ObjectOutputStream。 |
protected void | writeObjectOverride(Object obj) | 子类用于重写默认 writeObject 方法的方法。 |
void | writeShort(int val) | 写入一个 16 位的 short 值。 |
protected void | writeStreamHeader() | 提供 writeStreamHeader 方法,这样子类可以将其自身的头部添加或预加到流中。 |
void | writeUnshared(Object obj) | 将“未共享”对象写入 ObjectOutputStream。 |
void | writeUTF(String str) | 以 UTF-8 修改版格式写入此 String 的基本数据。 |
protected boolean enableReplaceObject(boolean enable) 允许流对流中的对象进行替换。
protected void writeClassDescriptor (ObjectStreamClass desc) 将指定的类描述符写入 ObjectOutputStream。
ObjectOutputStream.PutField putFields() 获取用于缓冲写入流中的持久存储字段的对象。
- 从类 java.lang.Object 继承的方法
clone, equals, finalize, getCl