[十一]JavaIO之DataInputStream 和 DataOutputStream


功能简介

DataInputStream和DataOutputStream 继承了各自的FilterInputStream以及FilterOutputStream
使用装饰器模式对InputStream和OutputStream进行功能加强

FilterInputStream以及FilterOutputStream 都是Decorator 抽象的装饰器角色(并非抽象类)
他们内部都包含了各自须要加强的抽象构建
image_5b986c00_4b85


DataInput         接口用于从二进制流中读取字节,并根据全部 Java 基本类型数据进行重构
DataOutput       
接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流



image_5b986c00_1b9f

image_5b986c00_5501
DataInputStream和DataOutputStream  经过实现DataInput 和DataOut接口
而且借助于装饰器模式,对InputStream和OutputStream的read方法加强出来多个版本
能够读取基本数据类型

DataInputStream

继承自InputStream中的read的两个版本方法
都是直接使用原方法
image_5b986c00_87d
能够看到,去掉read和个别独有的方法外
其他方法都来自DataInput

image_5b986c00_7912

而其余的方法都是须要依赖于read的两个版本的方法
好比下面这几个,都是对in.read调用的基础上,进行功能的加强
若是说都不使用in.read方法,那还叫什么装饰器模式

image_5b986c00_4864


DataOutputStream

write两个版本都来自OutputStream,没有功能加强
flush也是如此,没有加强


image_5b986c00_70ae
不过DataOutputStream 内部有一个计数器,用于记录已经读取的个数
incCount方法用于计数
image_5b986c00_8bd
其他来自DataOutput的方法,都是借助于装饰器模式对于write方法的加强
image_5b986c00_52bc
好比
image_5b986c00_2f6f


必定要理解装饰器模式
是你还有你
在使用你的能力的时候,顺便在加强一下,因此内部天然会须要借助于原来的方法


总结:

DataInputStream和DataOutputStream 借助于装饰器模式,继承自他们的FilterXXXoutStream
对InputStream进行功能加强
全部加强出来的功能,来自于DataInput以及DataOutput
这两个接口是用于约定 从二进制字节中读取数据 以及将基本类型数据写入到二进制字节的两个接口
其实若是说要不是别的地方也仍是须要DataInput以及DataOutput中的约定的话
这一切彻底均可以去掉这两个接口,直接提供readXXX 或者writeXXX方法便可
因此千万不要被DataInput以及DataOutput 迷惑

两条主线:装饰器模式功能加强加强的功能来自DataXXXput接口
相关文章
相关标签/搜索