[十一]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接口

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值