[九]JavaIO之ObjectInputStream 和 ObjectOutputStream
| ObjectStreamConstants | 写入 Object Serialization Stream 的常量 比如http请求似的,会有很多附加信息请求头,class文件有他的文件信息类似的道理 序列化也会写入一些除了直接数据信息以外的格式等相关的信息 这部分常量的值就在这个接口中 |
| DataInput | 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构 |
| ObjectInput |
DataInput 包括基本类型的输入方法
扩展了DataInput接口,以包含对象、数组和 String
|
| DataOutput |
接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流
|
| ObjectOutput |
DataOutput 包括基本类型的输出方法;
扩展了DataOutput接口,以包含对象、数组和 String
|
| 从上面的类层次结构以及其他辅助类的说明上可以看得出来 ObjectStreamConstants 约定了所有序列化时用到的常量信息 DataInput以及ObjectInput 都是接口,约定了从二进制读取基本类型 对象 数组 String的方法 DataOutput以及 ObjectOutput也都是接口,约定了将基本类型数据 对象 数组 String 转换为字节写入二进制流的方法 |
| ObjectInputStream 和 ObjectOutputStream 相当于继承了两个体系 一个体系是IO的读写方法约定 另一个是从二进制读取为数据或者数据编写二进制 两个体系结构的实现,构成了现在的ObjectInputStream 和 ObjectOutputStream 从下图看得出来 除了标记的以外,其中绝大多数方法都来自于DataInput DataOutput |
|
|
可以看一下关于DataInputStream以及DataOutputStream的介绍
其实完全可以看得出来,DataInputStream以及DataOutputStream他们两个也算是序列化
只不过他们不支持对象 数组 String 仅仅支持基本类型,功能不够强大,使用也不够方便
java原生的序列化不就是 基本类型/对象/数组/String 与 二进制字节流的相互转换嘛
|
ObjectInputStream中的方法大多依赖于bin变量.![]() |
比如:
|
构造方法中会创建 bin![]() bin 他是DataInputStream的内部类 BlockDataInputStream BlockDataInputStream内部还有两个变量分别是 DataInputStream 和PeekInputStream |
![]() 其中的PeekInputStream也是内部类
|
| 输入流有两种模式: 在默认模式下,输入数据以与DataOutputStream相同的格式写入; 在“块数据”模式中,输入数据由块数据标记括起来(详细信息见对象序列化规范)。 缓冲依赖于块数据模式:在默认模式下,没有预先缓冲任何数据;当在块数据模式下,当前数据块的所有数据都立即读取(并缓冲) 标记位是DataBlockInputStream中的blkmode ![]() 在BlockDataInputStream中的方法,会根据这个标志位调用不同的方法 比如
|
| 总结: ObjectInputStream中的方法很多调用BlockDataInputStream BlockDataInputStream又会根据模式blkmode 的值去调用实际的方法 可能是BlockDataInputStream自己实现的方法 也可能是PeekInputStream实现的方法 |
[九]JavaIO之ObjectInputStream 和 ObjectOutputStream的更多相关文章
- Java-IO之对象输入流输出流(ObjectInputStream和ObjectOutputStream)
ObjectInputStream和ObjectOutputStream的作用是对基本数据和对象进行序列化操作支持.创建文件输出流对应的ObjectOutputStream对象,该ObjectOutp ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- 使用ObjectInputStream和ObjectOutputStream注意问题
1.对象序列化,类实现Serializable接口 不需要序列化的属性,使用transient声明 2.使用套接字流在主机之间传递对象注意问题: 学习自:Socket同时使用ObjectInputSt ...
- java io系列05之 ObjectInputStream 和 ObjectOutputStream
本章,我们学习ObjectInputStream 和 ObjectOutputStream ObjectInputStream 和 ObjectOutputStream 介绍 ObjectInputS ...
- Java之IO(七)ObjectInputStream和ObjectOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/7003536.html 1.前言 本章介绍Java字节流中重要的成员,对象流ObjectInputStream和O ...
- ObjectInputStream与ObjectOutputStream类实现对象的存取
1. ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 ...
- IO操作之ObjectInputStream与ObjectOutputStream
之前写过DataInputStream和DataOutputStream,使用这两个类可以对java基本数据类型进行序列化和反序列化. 本篇再来两个新东西:ObjectInputStream,Obje ...
- Java IO: 序列化与ObjectInputStream、ObjectOutputStream
作者:Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和O ...
- Java IO(六) ObjectInputStream 和 ObjectOutputStream
Java IO(六) ObjectInputStream 和 ObjectOutputStream 一.介绍 对于对象数据的处理,Java IO 提供了 ObjectInputStream 和 Obj ...
随机推荐
- idhttp提交post带参数并带上cookie
有这么一个提交连接 http://www.XXXXXX.com/test.php?p1=411328&p2=1&d1=HeroSkinList 一共有三个参数[p1] [p2] [ ...
- 常用jq代码
1. 只允许输入数字,且禁止输入法 <html> <head> <script type='text/javascript' src='../../js/jquery.m ...
- 移动端 rem适配方法
rem适配 一, 网易适配方法 屏幕宽度/设计稿rem宽度=页面动态font-size值(如:375/7.5=50) document.documentElement. ...
- HBase MVCC 机制介绍
关键词:MVCC HBase 一致性 本文最好结合源码进行阅读 什么是MVCC ? MVCC(MultiVersionConsistencyControl , 多版本控制协议),是一种通过数据的多版本 ...
- 2.9 linux学习(1)
2019-2-9 16:07:44 学一下Linux,多学一点东西 新认识个老师,超哥 很牛逼感觉! https://www.cnblogs.com/pyyu/p/9276851.html 这是入门参 ...
- idea git将多余的代码提交到本地,如何退回。
场景:代码commit到本地仓库,还没有push到远程仓库,这时要回退代码. 介绍下Reset Head中三种Reset Type类型: 1.Mixed(默认):它回退到某个版本,本地会保留源码,回退 ...
- Bandwagon的配置记录(一) —— kexue上网
写在前面 这是kexue上网的一种方法. 看文章前,先拉最底下,看一遍“写在最后”. 租个服务器 我租了个洛杉矶的服务器,系统是ubuntu16.04 x86_64 进入KiwiVM Control ...
- react 引用 layer (防忘记)
1.先到 百度静态资源公共库 (http://cdn.code.baidu.com/)找到jquery和layer地址 2.找到./public/index.html 引入jquery和layer 3 ...
- .NET程序员所需要注意的网站资源
一个程序员 需要 对 技术 和 行业 两方面同时具有极大热情和注意力才能让自己在一个新的台阶. 有些程序员是对技术有着极大的热情但是行业完全不注意,这样我感觉只能成为一个专家,并不能让自己真正的质变, ...
- HTML5 history.pushState()和history.replaceState()新增、修改历史记录用法介绍
抽空研究了下这两个新方法,确实可以解决很多问题 1.使用pushState()方法 可以控制浏览器自带的返回按钮: 有时候我们想让用户点击浏览器返回按钮时,不返回,或执行其他操作,这时,就用到hist ...



