功能简介

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

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


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





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

DataInputStream

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


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


DataOutputStream

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

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

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

比如


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


总结:

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

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



[十一]JavaIO之DataInputStream 和 DataOutputStream的更多相关文章

  1. Java IO(十一) DataInputStream 和 DataOutputStream

    Java IO(十一) DataInputStream 和 DataOutputStream 一.介绍 DataInputStream 和 DataOutputStream 是数据字节流,分别继承自 ...

  2. DataInputStream和DataOutputStream使用方法细节探讨

    DataInputStream和DataOutputStream都是Java中输入输出流的装饰类,用起来非常方便.今天就来讨论一下使用该类时候遇到的编码问题.  package com.vince ...

  3. java下DataInputStream与DataOutputStream写入数据的同时写入数据类型

    package cn.stat.p2.demo; import java.io.DataInputStream; import java.io.DataOutputStream; import jav ...

  4. 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...

  5. Java之IO(四)DataInputStream和DataOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6986155.html 1.前言 DataInputStream和DataOutputStream分别继承了Fil ...

  6. java代码----------实现创建DataInputStream和DataOutputStream进行读写

    总结: 主要是 捕获异常 package com.a.b; import java.io.*; public class testData { public static void main(Stri ...

  7. DataInputStream和DataOutputStream

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInp ...

  8. java io流 数据流 DataInputStream、DataOutputStream、ByteArrayInputStream、ByteArrayOutputStream

    例子程序: package io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ...

  9. [二十一]JavaIO之BufferedReader 与 BufferedWriter

    功能简介 BufferedReader  从字符输入流中读取文本,内部缓冲各个字符,从而实现字符.数组和行的高效读取 BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个 ...

随机推荐

  1. 190327 Python登录接口

    #!Author:John # _*_ coding: utf-8 _*_ #编写登录接口 #输入用户名密码 #认证成功后显示欢迎信息 #输错三次后锁定 import sys, os, getpass ...

  2. HTML入门14

    HTML表单 这块部分开始强调表单也是用的比较多的部分,好好补漏啊啊啊啊 表单用来做交互,处理所有方面结构到样式,到自定义小部件. form元素,严禁嵌套表单,表单嵌套会使得表单得行为不可预知,引入f ...

  3. Linux用命令启动程序(eclipse、IDEA等)

    打开根目录用管理员权限打开HOME 找到下图截图中的框选出的文件 用文本编辑器打开后 在文件末尾添加所需要打开的应用文件所在的目录 这里以本人的IDEA和eclipse为例:

  4. 用cmd命令执行SQL脚本

    1.简单说明 osql 为SQL Server的命令 2.要在cmd中执行该命令,一般安装SQL Server后该命令对应的路径会自动添加到系统环境变量中. 3.-S 表示要连接的数据库 -U表示登录 ...

  5. FCC(ES6写法) Friendly Date Ranges

    把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 包含当前年份和相同月份的时候,makeFri ...

  6. mantisbt的配置与安装

    下载并安装wampserver; 安装时,提示SMTP服务器时,应正确填写邮箱的SMTP的服务器地址: 安装完成后,登录phpMyAdmin; 给原有的root用户创建密码,所有root用户: 创建一 ...

  7. [SQL]LeetCode262.行程和用户 | Trips and Users

    SQL架构 Create table If Not Exists Trips (Id )) Create table If Not Exists Users (Users_Id ), Role ENU ...

  8. [Swift]LeetCode513. 找树左下角的值 | Find Bottom Left Tree Value

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  9. [Swift]LeetCode599. 两个列表的最小索引总和 | Minimum Index Sum of Two Lists

    Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite ...

  10. [Swift]LeetCode646. 最长数对链 | Maximum Length of Pair Chain

    You are given n pairs of numbers. In every pair, the first number is always smaller than the second ...