1.public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
分析:ObjectInputStream是将对象的原始数据序列化,ObjectOutputStream将序列化的数据反序列化。当分别使用FileInputStream和FileOutStream做为输入和输出流ObjectInputStream和ObjectOutputStream是可以提供持久化的应用程序。ObjectInputStream 用于恢复先前序列化的对象,其它的用途包括主机之间使用socket流传递对象、远程系统调用。

ObjectInputStream 确保所有的对象类型跟Java虚拟机中的一样,使用标准机制按要求加载。

只有对象支持java.io.Serializable或java.io.Externalizable接口的才能够被从流中读取。

方法readObject是被用来从流中读取对象,java的安全性应该被用来获取想要的类型,在Java中,string和arrays在序列化时是被当做对象,读取时把它们转换成期望的类型。

原始数据类型可以直接使用DataInput接口中期望的方法读取。

默认的反序列化机制是恢复每个字段在写入的时候的值,字段声明为transient或static是会被反序列化进程忽略掉的,对其它对象的引用会使在必要的时候从流中读取,使用引用共享机制正确的恢复对象,反序列化时新的对象会被创建,以防止现有对象被覆盖。

读取对象类似于运行新对象的构造函数,内存被分配给对象并初始化为零(null),非序列化类的无参构造函数被调用然后序列化字段的类是从流中恢复。

例如:从示例中的流中读取ObjectOutputStream:

FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);

int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject();

ois.close();

类通过控制实现java.io.Serializable 和java.io.Externalizable接口来实现序列化。

实现序列化接口允许序列化对象保存和恢复实体状态并且它允许类在流写入时间和写入的时间之间演进,它自动遍历对象之间的引用,保存和恢复实体的状态。

序列化的类,需要特殊处理的序列化和反序列化过程中应实现以下的方法:

private void writeObject(java.io.ObjectOutputStream stream)
throws IOException;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;

readObject方法负责阅读和使用相应的writeObject方法流写入的数据恢复其特定的类的对象的状态。该方法不需要担心其属于超类或者子类的状态,状态的恢复是从ObjectInputStream 中读取的字段和对象,读取原始数据类型是被DataInput接口支持的。
————————————————

原文链接:https://blog.csdn.net/yaomingyang/article/details/79345985

java.io.ObjectInputStream类详解的更多相关文章

  1. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  2. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  3. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  4. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  5. Java中dimension类详解

    Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788

  6. java之Matcher类详解

    在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Matcher  声明: ...

  7. java的ReentrantLock类详解

    ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...

  8. JDK1.8 java.io.Serializable接口详解

    java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...

  9. java.io.DataInput接口和java.io.DataOutput接口详解

    public interface DataInput DataInput 接口用于从二进制流中读取字节,并重构所有 Java 基本类型数据.同时还提供根据 UTF-8 修改版格式的数据重构 Strin ...

随机推荐

  1. Django多对多关系建立及Form组件

    目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOO ...

  2. Java容器汇总【红黑树需要再次学习】

    1,概述 2,Collection 2.1,Set[接触比较少] 2.1.1 TreeSet 底层由TreeMap实现 基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作.但是查找效率不如 ...

  3. sql 视图的好处

    第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义, ...

  4. GraphQL实战篇(一)

    看过基础篇的都知道,GraphQL创建Schema有两种方式,Schema First和Graph Type,前者使用GraphQL Schema Language类似于EF的DB First:后者和 ...

  5. 基于【 Docker】二 || Docker的入门安装

    一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3. ...

  6. Django路由及函数视图

    路由系统 在django中,uri与逻辑函数的对应关系我们称之为路由系统 伪静态 伪静态是相对于静态文件来说的,例如https://www.cnblogs.com/hesujian/p/1116581 ...

  7. 运行 jar 的问题

    lib stwe.jar 同目录

  8. linux串口命令

    proc # cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 t ...

  9. 鼠标指针光标样式css cursor default pointer hand url

    一.cursor语法与结构 1.cursor语法:cursor : auto | crosshair | default | hand | move | help | wait | text | w- ...

  10. ASE19团队项目 beta阶段 model组 scrum1 记录

    本次会议于12月2日,18时30分在微软北京西二号楼sky garden召开,持续25分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing ...