[IO] JavaIO之DataInputStream 和 DataOutputStream(十二)

编程语言 编程语言 1665 人阅读 | 0 人回复

功能简介

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

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

image.png

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

image.png

DataInputStream和DataOutputStream 通过实现DataInput 和DataOut接口 并且借助于装饰器模式,对InputStream和OutputStream的read方法增强出来多个版本 可以读取基本数据类型

本文作者:程序员潇然 疯狂的字节X https://crazybytex.com/

DataInputStream

继承自InputStream中的read的两个版本方法 都是直接使用原方法

image.png

可以看到,去掉read和个别独有的方法外 其余方法都来自DataInput

image.png

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

image.png

DataOutputStream

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

image.png

不过DataOutputStream 内部有一个计数器,用于记录已经读取的个数 incCount方法用于计数

其余来自DataOutput的方法,都是借助于装饰器模式对于write方法的增强

image.png

比如

image.png

一定要理解装饰器模式 是你还有你 在使用你的能力的时候,顺便在增强一下,所以内部自然会需要借助于原来的方法

总结:

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

两条主线: 装饰器模式功能增强 增强的功能来自DataXXXput接口

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-148-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
海康摄像头接入 wvp-GB28181-pro平台测试验
[md]### 简介 开箱即用的28181协议视频平台 `https://github.c