[九]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 ...
随机推荐
- 全民https时代,Let's Encrypt免费SSL证书的申请及使用(Tomcat版)
近几年,在浏览器厂商的强力推动下,HTTPS的使用率大增.据统计,Firefox加载的网页中启用HTTPS的占比为67%,谷歌搜索结果中HTTPS站点占比已达50%,HTTPS网站已获得浏览器和搜索引 ...
- Nuxt.js 从入门到放弃
Nuxt 是 Vue 上的 SSR,也就是服务端渲染应用框架,可在很大程度上解决当前 SPA 和 CSR 的首页加载慢,不利于 SEO 的问题.本场 Chat 就将详细介绍 Nuxt 的使用以及相关概 ...
- 搭建正则开源工具Regexper
一.Regexper简介 Regexper是一款正则可视化开源工具,直接输入正则表达式就能用可视化显示出来,方便的检测我们书写的正则是否正确. 二.Regexper地址在线版:https://rege ...
- 网页加水印 svg 方式
/** *网页加水印 svg 方式 * * @export * @param {*} [{ * container = document.body, * content = '请勿外传', * wid ...
- c# 集合的长度为什么是可变的
摘要: 写在前面:此随笔仅仅是作为个人学习总结,有不对的地方,请各位前辈指正O(∩_∩)O........ 一: 引入 在学习集合之前我们都学习过数组.可以知道数组的长度在声明的时候就已经被固定了,不 ...
- prometheus — 基于文件的服务发现
基于文件的服务发现方式不需要依赖其他平台与第三方服务,用户只需将要新的target信息以yaml或json文件格式添加到target文件中 ,prometheus会定期从指定文件中读取target信息 ...
- maven <include>与<exclude>划定的范围存在冲突,则以<exclude>配置为准。
maven 与划定的范围存在冲突,则以配置为准.
- B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
B4及之后:为谷歌软件定义WAN的可用性和扩展管理层次化.划分和不对称 本文为SIGCOMM 2018会议论文,由谷歌提供. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎 ...
- DCOS实践分享(1):基于图形化模型设计的应用容器化实践
2015年11月29日,Mesos Meetup 第三期 - 北京技术沙龙成功举行.本次活动由数人科技CTO 肖德时 和 Linker Networks 的 Sam Chen 一起组织发起. 在这次m ...
- 从协议入手,剖析OAuth2.0(译 RFC 6749)
1.介绍 https://tools.ietf.org/html/rfc6749 传统的client-server授权模型,客户端通过使用凭证(通常的用户名和明文密码)访问服务端受保护的资 ...



