[九]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 ...
随机推荐
- Tensor索引操作
#Tensor索引操作 ''''' Tensor支持与numpy.ndarray类似的索引操作,语法上也类似 如无特殊说明,索引出来的结果与原tensor共享内存,即修改一个,另一个会跟着修改 ''' ...
- sketch2code 有的叫screenshot to code什么的
先mark一下项目,回头再深究 https://github.com/mzbac/sketch2code https://www.floydhub.com/emilwallner/datasets/h ...
- ES6新增的常用数组方法(forEach,map,filter,every,some)
ES6新增的常用数组方法 let arr = [1, 2, 3, 2, 1]; 一 forEach => 遍历数组 arr.forEach((v, i) => { console.log( ...
- 用kattle将数据从SQLserver中导入到vertica中
今天简单的学习了一下ETL工具kattle了,只是简单的上手,不过这也已经够我去做POC了. 首先大体介绍一下kattle,Kettle是一款国外开源的ETL工具,纯java编写,可以在Window. ...
- Qt5+MSVC2015编译器编译发布的Release程序运行崩溃,如何查找崩溃的原因??
除了加log信息,还有什么方法?? ==================================2019/4/26============================= 1 常见的c++内 ...
- shuffle的工作原理
Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序.如果你不知道MapReduc ...
- sqlmap Windows 安装教程
第一步:下载 python :https://www.python.org/downloads/ (这里有python各种版本,但是一般建议安装3和2.7) sqlmap:https://git ...
- 玩转vue前进刷新,后退不刷新and按需刷新
大白萝卜小课堂开讲了!带你玩转vue前进后退按需刷新! 用vue做后台管理项目,特别是有列表页.列表数据详情页.列表数据修改页功能的码友们,几乎都被vue前进后退都刷新的逻辑坑过,本萝卜更是! 萝卜的 ...
- 【转载】看StackOverflow如何用25台服务器撑起5.6亿的月PV
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...
- 导出excel表格,前端和后台导出
问题:项目框架中导出不知道有什么限制,数据稍微大点导出不了,向上面请求解决,结果一圈推下来又推回来了,所以决定自己写,参考了网上很多大神的博客,开始试了前端导出,想着比较简单,但是乱码问题始终解决不了 ...