第2章 深入分析java I/O的工作机制(下)
2.6 设计模式解析之适配器模式
2.6.1 适配器模式的结构
把一个类的接口变换成一客户端能接受的另一个接口。
Target(目标接口): 要转换的期待的接口。
Adaptee(源角色):需要适配的接口。
Adapter(适配器):将源接口适配成目标接口,继承源接口,实现目标接口。
2.6.2 JAVA I/O 中的适配器模式
JAVA I/O中许多这样的需求,如将字符串数据变成字节数据保存到文件中,将字节数据转变成流数据等。
InputStreamReader和OutPutStreamWriter类分别继承了Reader和Write接口,但是要创建他们的对象,必须传入InputStream和OutputStream的实例。InputStreamReader和
OutPutStreamWriter的作用就是将InputStream和Outputstream适配到Reader和Writer。
InputStreamReader实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char要经过编码。
适配器是InputStreamReader, 源角色是InputStream代表的实例对象,目标接口是Reader。
此外,StringReader将一个String类适配到Reader接口;ByteArrayInputStream适配器将byte数组适配到InputStream接流处理接口。
2.7 设计模式解析之装饰器模式
2.7.1 装饰器模式的结构
将某个类重新装扮一下,使他比以前更加漂亮 或功能更多。但是原来类的使用者还不应该感受到装饰前后的不同,否则就破坏了原来类的结构,所以装饰器模式要做到对装饰使用者透明。
Component: 抽象组件角色。定义了一组抽象的接口,规定了这个被装饰的组件都有哪些功能。
ConcreteComponent: 实现了抽象组件的功能
Decorator: 装饰器角色,它持有一个Component对象实例的引用,定义了与抽象组件一致的接口。
ConcreteDecorator: 具体的装饰器实现者,负者实现装饰器角色定义的功能。
2.7.2 JAVA I/O 中的装饰器模式
InputStream类就是以抽象组件存在的:而FileInputStream就是具体的组件,实现了抽象组件的所有接口;FilterInputStream就是装饰角色,实现了InputStream的所有接口,并且持有InputStream的对象实例的引用;BufferedInputStream是具体的装饰器实现者,它给inputstream附加了功能,作用就是使得InputStream读取的数据保存在内存中,而提高性能。
2.8 适配器模式与装饰器模式的区别
装饰器模式和适配器模式都一个别名是包装模式。适配器模式是要将一个接口转变成另外一个接口,通过改变接口来达到重复使用的目的;装饰模式是要保持接口,但是给增强接口功能,或者是提高性能。
第2章 深入分析java I/O的工作机制(下)的更多相关文章
- 第2章 深入分析java I/O的工作机制(上)
java的I/O操作类在包java.io下,大致分成4组: 所有文件的存储都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再存储这些字节到磁盘.在读取文件时,也是一个 ...
- 第二章 深入分析Java I/O的工作机制(待续)
Java的I/O类库的基本架构 磁盘I/O工作机制 网络I/O工作机制 NIO的工作方式 I/O调优 设计模式解析之适配器模式 设计模式解析之装饰器模式 适配器模式与装饰器模式的区别
- 第二章:深入分析java I/O的工作机制
.2.1 java的I/O类库的基本架构 I/O的机器获取和交换信息的主要渠道,在当今数据大爆炸时代,I/O问题尤其突出,很容易成为一个性能瓶颈,Java在I/O上也一直做持续的优化,现在也引入了NI ...
- 深入分析 Java I/O 的工作机制--转载
Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道.在当今这个数据大爆炸时代, ...
- 深入分析 Java I/O 的工作机制
I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 ...
- 深入分析Java I/O的工作机制 (一)
此篇博客看至许令波的深入分析javaWeb内幕书籍, 此篇博客写的是自己看完之后理解的重点内容,加一些理解,希望对你有帮助. 1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合, ...
- 深入分析Java I/O的工作机制 (三)网络I/O的工作机制 很详细
3.网络I/O的工作机制 前言:数据从一台主机(服务端)发送到网络中的另一台主机(客户端)需要经过很多步骤:首先需要有相互沟通的意向.其次要有能够沟通的物理渠道(物理链路):是通过电话,还是直接面对面 ...
- 深入分析Java I/O的工作机制 (二)
2.磁盘I/C工作机制 2.1几种访问文件的方式 内核空间和用户空间:内核空间是内核使用,用户空间是应用程序使用:除非编译内核要考虑内核空间,其余情况都可以按照用户空间处理.将用户空间和内核空间置于这 ...
- 【深入分析Java Web技术内幕】2、深入分析Java I/O的工作机制
Java的I/O类库的基本架构 基于字节操作的IO接口:InputStream.OutputStream 基于字符操作的IO接口:Writer.Reader 基于磁盘操作的IO接口:File 基于网络 ...
随机推荐
- 在js中,ajax放在for中,ajax获取得到的变量有误
先看代码 for(var i=0;i<tds.length;i++){ mui.ajax(url+'api/client/gifts/isSigned', {data :{ sqId:" ...
- Docker 简单应用
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world runoob@runoob:~$ docker run ubunt ...
- 百度之星2017初赛A-1006-度度熊的01世界
度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- mysql测试工具
Super Smack安装和使用 . sysbench
- 【machine learning通俗讲解code逐行注释】之线性回归实现
现在机器学习算法在分类.回归.数据挖掘等问题上运用的十分广泛,对于初学者来说,可能一听到'算法'或其他的专属名词都感觉高深莫测,以致很多人望而却步,这让很多人在处理很多问题上失去了一个很有用的工具.机 ...
- opencv:创建滑动条
函数原型: ,); #include <opencv.hpp> using namespace cv; #define WINDOW_NAME "线性混合示例" // ...
- Ti CC2540蓝牙模块学习笔记整理
接触CC2540几天,终于有了初步的理解,现将笔记整理如下,只是皮毛,如有错误,还请指正,还有好多没闹明白的地方,以后应该还会继续向里面更新~ 一.整体 1.TI的蓝牙平台支持2种协议栈/应用配置:单 ...
- request对象和response对象,什么时候用,具体用哪一个,没有感觉
request对象和response对象,什么时候用,具体用哪一个,没有感觉
- 【git】git知识梳理(二):服务器
(四) 远程仓库通常只是一个裸仓库(bare repository):.git子目录 四种协议:本地传输, SSH, GIT, HTTP, 除了http,均需要在服务器端安装运行git. SSH:SS ...
- canvas - 圆圈内 hover效果
链接