Java IO(九)FilterInputStream 和 FilterOutputStream
Java IO(九)FilterInputStream 和 FilterOutputStream
一、介绍
FilterInputStream 和 FilterOutputStream 是过滤字节输入流和过滤字节输出流。它们的作用是封装其他的基础流,并为它们提供额外的功能。它们的子类分别有:
- 缓冲流:BufferedInputStream 和 BufferedOutputStream
- 数据流:DataInputStream 和 DataOutputStream
- 回退流:PushBackInputStream 和 PushBackOutputStream
二、装饰者模式和继承
装饰者模式,就是将原有的基础流进行"装饰",那么装饰后的方法要与原先被装饰的基础类要保持一致,也可以在对基础流进行扩展。而继承是继承父类的属性和方法,通过重写父类里面的方法也可以起到"装饰"作用,比如强化或者优化父类里面的一些方法。
两者的区别是装饰者模式可以动态地扩展一个对象,给对象添加额外的功能,而且装饰者和被装饰者之间不会产生耦合。
(一)、实现 BufferedInputStream 的功能,采用继承的方式。
如果采用继承的方式,要实现 BufferedInputStream 的功能,我们就必须继承大部分的字节输入流,Java IO中还有其他的如 DataInputStream 等,如果都使用继承方式,那么Java IO 体系会变得很臃肿,而且类与类之间的耦合度特别高。
(二)、实现 BufferedInputStream 的功能,采用装饰者模式。
通过上面的继承方式,通过装饰者模式可以解决继承带来的问题。
装饰者模式相比继承,没有这么多繁杂的类,而且类与类的之间的耦合性降低,具体做法就是将类 FilterInputStream 提取为一个父类,而其子类就是各个功能的实现类。如果想要基础输入流要某个功能,那么就可以将对应的基础输入流传到对应的子类构造方法中。
Java IO(九)FilterInputStream 和 FilterOutputStream的更多相关文章
- java io系列11之 FilterOutputStream
FilterOutputStream 介绍 FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”.它主要包括BufferedOutputStream, Dat ...
- 系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream
目录:系统学习 Java IO---- 目录,概览 BufferedInputStream BufferedInputStream 类为输入流提供缓冲. 缓冲可以加快IO的速度. BufferedIn ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- java io系列12之 BufferedInputStream(缓冲输入流)的认知、源码和示例
本章内容包括3个部分:BufferedInputStream介绍,BufferedInputStream源码,以及BufferedInputStream使用示例. 转载请注明出处:http://www ...
- java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...
- java io系列
java io系列01之 "目录" java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) java io系列03之 ...
- java.io包中的字节流—— FilterInputStream和FilterOutputStream
接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...
- Java中FilterInputStream和FilterOutputStream的用法
FilterInputStream FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStre ...
随机推荐
- TD-LTE华为 DBS3900数据配置实践 典型案例
案例:华为 DBS3900 双基站二扇区配置(同频切换) 一.数据配置前的硬件准备: HW-DBS3900: (1#基站名称) FAN (风扇),安装在 16#槽位: LBBP (基带处理单板),安装 ...
- 心路历程-安装Docker
心路历程-安装Docker 本机环境 Windows10 激活HyperV功能 新建CentOS虚拟机 centos docker安装 由于是新的虚拟机,所以没有docker旧版本的问题,不需要卸载旧 ...
- 解决使用nlpir分词,遇到License过期问题
问题:使用pynlpir分词,遇到License过期问题 抛出异常:pynlpir.LicenseError: Your license appears to have expired. Try ru ...
- LabVIEW(数据库连接)
Driver={Microsoft Access Driver (*.mdb)}; Dbq=路径; Uid=Admin; Pwd=密码; 插入: INSERT INTO xs(学号,姓名,专业名,性别 ...
- [hdu5253] 最小生成树,Kruskal
题意:有n*m个单位的农田,给定每个单位农田地势高低,现在需要灌溉所有农田,如果把水引入相邻的农田里需要的管道长度为两者的高度差.求最少的管道长度花费. 思路:比较明显的最小生成树问题,相邻两点之间连 ...
- js前端获取当前日期,日期格式为yyyy-mm-dd HH:MM
var date = new Date(); var year = date.getFullYear(); var month = date.getMonth()+1; var day = date. ...
- 基于Nettty打造自己的MVC服务器
最近开始折腾Netty,体验下NIO编程.既然学习了,就要做点东西出来,要不然不容易掌握学到的东西.在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sam ...
- JSP+Servlet+JDBC+mysql实现的学生成绩管理系统
项目简介 项目来源于:https://gitee.com/zzdoreen/SSMS 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术 ...
- 你了解C#的协变和逆变吗
从C# 4.0开始,泛型接口和泛型委托都支持协变和逆变,由于历史原因,数组也支持协变. 里氏替换原则:任何基类可以出现的地方,子类一定可以出现. 协变(out) 协变:即自然的变化,遵循里氏替换原则, ...
- 让写作省心一点——Markdown和CSS实践
1 引言 今天这篇推送和以往不太一样,乍一看就能发现格式有了变化.没错,这是我专门设计的品牌模板,也就是本公众号以后创作的文章可直接套用,获得一致的风格样式. 除此以外,文章里的全部元素(包括标题.表 ...