JavaIO之DataInputStream 和 DataOutputStream(十二)
### 功能简介DataInputStream和DataOutputStream 继承了各自的FilterInputStream以及FilterOutputStream
使用装饰器模式对InputStream和OutputStream进行功能增强
FilterInputStream以及FilterOutputStream 都是Decorator 抽象的装饰器角色(并不是抽象类)
他们内部都包含了各自需要增强的抽象构建
!(data/attachment/forum/202208/26/105609fxrbmxjoa9p99jjp.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
| 类 | 描述 |
| ------------ | ------------------------------------------------------------------------------ |
| DataInput| 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构 |
| DataOutput | 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流 |
!(data/attachment/forum/202208/26/105712w9b9oqq9nzwvi3ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
DataInputStream和DataOutputStream通过实现DataInput 和DataOut接口
并且借助于装饰器模式,对InputStream和OutputStream的read方法增强出来多个版本
可以读取基本数据类型
本文作者:程序员潇然 疯狂的字节X https://crazybytex.com/
### DataInputStream
继承自InputStream中的read的两个版本方法
都是直接使用原方法
!(data/attachment/forum/202208/26/105754epf7eabwpx3aowow.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
可以看到,去掉read和个别独有的方法外
其余方法都来自DataInput
!(data/attachment/forum/202208/26/105811ndop6sintcg6c8dn.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
而其他的方法都是需要依赖于read的两个版本的方法
比如下面这几个,都是对in.read调用的基础上,进行功能的增强
如果说都不使用in.read方法,那还叫什么装饰器模式
!(data/attachment/forum/202208/26/105830lmbxspk8mkxnb481.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
### DataOutputStream
write两个版本都来自OutputStream,没有功能增强
flush也是如此,没有增强
!(data/attachment/forum/202208/26/105850bpou938gcvgapl99.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
不过DataOutputStream 内部有一个计数器,用于记录已经读取的个数
incCount方法用于计数
其余来自DataOutput的方法,都是借助于装饰器模式对于write方法的增强
!(data/attachment/forum/202208/26/105909xhycpwwopvhoo41f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
比如
!(data/attachment/forum/202208/26/105919m5vyscklza8sax8u.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
一定要理解装饰器模式
是你还有你
在使用你的能力的时候,顺便在增强一下,所以内部自然会需要借助于原来的方法
总结:
DataInputStream和DataOutputStream 借助于装饰器模式,继承自他们的FilterXXXoutStream
对InputStream进行功能增强
所有增强出来的功能,来自于DataInput以及DataOutput
这两个接口是用于约定 从二进制字节中读取数据 以及将基本类型数据写入到二进制字节的两个接口
其实如果说要不是别的地方也还是需要DataInput以及DataOutput中的约定的话
这一切完全都可以去掉这两个接口,直接提供readXXX 或者writeXXX方法即可
所以千万不要被DataInput以及DataOutput 迷惑
两条主线:
装饰器模式功能增强
增强的功能来自DataXXXput接口
!(data/attachment/forum/202206/16/141330jha7st9soow8772i.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "common_log.png")
`转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-148-1-1.html `
页:
[1]