zoukankan      html  css  js  c++  java
  • [十一]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接口



  • 相关阅读:
    Android 适配底部返回键等虚拟键盘的完美解决方案
    Android 第三方库导致jar包冲突解决办法
    git强制push
    解决因为本地代码和远程代码冲突,导致git pull无法拉取远程代码的问题
    上周热点回顾(4.4-4.10)团队
    上周热点回顾(3.28-4.3)团队
    上周热点回顾(3.21-3.27)团队
    上周热点回顾(3.14-3.20)团队
    .NET跨平台之旅:corehost 是如何加载 coreclr 的团队
    .NET跨平台之旅:探秘 dotnet run 如何运行 .NET Core 应用程序团队
  • 原文地址:https://www.cnblogs.com/noteless/p/9632881.html
Copyright © 2011-2022 走看看