Java IO框架总揽--ObjectInputStream& ObjectOutputStream源码解读

ObjectInputStream与ObjectOutputStream的做用是:对基本数据和对象进行序列化操做进行支持。其中ObjectInputStream对象提供对基本数据和对象对持久存储,当咱们须要读取这些存储这些基本数据或对象时,能够建立文件输入流对应的ObjectInputStream,进而读取这些基本数据或对象。

序列化有关的基础知识:
1 须要序列化的类必须实现java.io.Serializable接口,不然会抛出NotSerializableException异常。
2 若是检测到反序列化的类的serialVersionUID和对象二进制流的serialVersionUID不一样,则会抛出异常。
3 Java序列化会将一个类中包含的引用中的全部的成员变量保存下来,因此里面的引用类型也要实现java.io.Serializable的接口。
4 对于不用采用默认序列化或无需序列化的成员变量,能够添加transient关键字,并非说添加了transient关键字就必定不能序列化。
5 每个类能够实现readObject、writeObject等方法实现本身的序列化策略,即便是transient修饰的成员变量也能够手动调用ObjectOutputStream的write*等方法,将成员变量序列化。

ObjectOutputStream 有关方法

1 public ObjectOutputStream(OutputStream out) throws IOException {} 
* 建立一个ObjectOutputStream去写入指定的OutputStream,此构造函数将序列化流头写入底层流,调用者须要当即刷新流,以确保用于接收ObjectInputStreams的构造函数在读取该头时不会阻塞。

2 protected ObjectOutputStream() throws IOException, SecurityException {}
* 为彻底从新实现ObjectOutputStream的子类提供一种方法,使其没必要分配仅由ObjectOutputStream的实现使用的私有数据

3 public void useProtocolVersion(int version) throws IOException {}
* 指定在编写流时使用的流协议版本

4  public final void writeObject(Object obj) throws IOException {}
* 将指定的对象写入ObjutoExtStudio流,对象的类、类的签名、类及其全部超类型的非瞬态和非静态字段的值均可以经过该方法写入,重写writeObject和readObject方法能够将默认的序列号重写,该对象引用的对象是经过传递方式编写的,以便ObjectInputStream能够重构等效的、完整的对象。
相关文章
相关标签/搜索