javaIO系统----再看装饰者模式
javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯,虽然这样的做法有时候会迷惑使用者,对于这个确定,确实恼火,不过当弄明白了其设计方式,个人觉得倒也不会造成太大的困扰。
一:
最基本的IO:inputStream,outputStream,Reader,Writer
前两者为JDK1.0中的内容,后两者为JDK1.1中增加的内容。首先要明确的是,任何输入输出的类都由此四类派生而来。其中前两个主要为对字节的读写,后两个主要为对字符的读写。
二:
如果现在要对文件进行读写操作,则可以直接使用最基本的方式FileinputStream,FileoutputStream,FileReader,FileWriter,这四个各自 直接或间接 继承自最基本四个IO
这四各类的构造器接受参数为:String,File,以及文件描述符,通过这四个可以创建对文件的“流”。但是如果直接这样创建的“流”,其操作方式为每次读写都对硬盘访问,理论上这种方式肯定不如带缓存方式的读写。
三:
带缓存的读写类有BufferedinputStream,BufferedoutputStream,BufferedReader,BufferedWriter。
BufferedinputStream,BufferedoutputStream 构造器接受的参数为inputStream,outputStream 和一个size(用来指定缓冲区大小,有默认值)
BufferedReader,BufferedWriter 构造器接受的参数为Reader,Writer 和一个size(用来指定缓冲区大小,有默认值)
可以看出,如果要想用这四个方法进行文件读写,首先应该使用 二 中的类创建出我们需要的构造器参数,然后再创造出我们需要的带buffer的对象。
四:
对流的读写,java提供了一种格式读取方式:DatainputStream,DataoutputStream,虽然Stream本质上是对字节的读取,但是通过java自身的数据格式,这种方式可以直接决定一次读取多少字节,并将其转化为相应的数据格式,此类的构造器接受的的参数为inputStream outputStream,因此要使用其对文件进行读写,需要使用 二 中的方式进行包装。
五:
对字符的读取,之前说了,从jdk1.1之后,java提供了Reader和Writer进行,同时将readLine方法从Stream中移动到这两个类当中。如果要进行readLine操作,只能从此两类进行,但是这并不意味着Stream不能够进行行读取。
这时候,我们便需要适配器模式进行转换,将Stream转化为本节中的两个类,inputStreamReader与outputStreamWriter,这两个类接受的参数即为Stream,这样子就可以将Stream包装成可以readLine的Reader或Writer
装饰者模式:装饰者模式让我们能够自由组合自己想要的功能,此特性在javaIO系统中展现了其威力,并也非常好的解释了为什么对一个文件的读取为什么要new很多歌对象。
适配器模式:自然就如其名字一样,将一个东西包装一层,编程另一个我们所需要的东西。
javaIO系统----再看装饰者模式的更多相关文章
- 装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用
通过模拟咖啡馆的点单系统来剖析装饰者模式的使用 参考:https://blog.csdn.net/gududedabai/article/details/81989196 一).传统的点单系统构建,每 ...
- Java 的设计模式之一装饰者模式
刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行 ...
- Java设计模式之装饰者模式
要实现装饰者模式,注意一下几点内容: 1.装饰者类要实现真实类同样的接口 2.装饰者类内有一个真实对象的引用(可以通过装饰者类的构造器传入) 3.装饰类对象在主类中接受请求,将请求发送给真实的对象(相 ...
- 结合JDK源码看设计模式——装饰者模式
定义 在不改变原有对象的基础之上,将功能附加到对象上 适用场景 扩展一个类的功能 动态的给对象增加功能,当功能不需要的时候能够动态删除 详解 在看到定义的时候,可能很多人会想,这不就是继承吗?的确很像 ...
- JavaIO模型--装饰者模式
JavaIO体现出装饰者的设计模式 今天在学SparkRDD之前,听了一堂复习JavaIO的课,觉得讲得不错 Java的IO一直让我觉得一层一层的很麻烦,刚接触的时候,理不太清楚 只知道要分解为输入输 ...
- 再起航,我的学习笔记之JavaScript设计模式13(装饰者模式)
装饰者模式 装饰者模式(Decorator): 在不改变原对象的基础上,通过对其进行过包装拓展(添加属性高或者方法)使原有对象可以满足用户的更复杂需求. 如果现在我们有个需求,需要做一个提交表单,当我 ...
- 由孙悟空的七十二变看Java设计模式:装饰者模式
目录 应用场景 代码示例 改进代码 装饰者模式 定义 意图 主要解决问题 何时使用 优缺点 孙悟空的七十二变 应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减5 ...
- 解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解
package day02; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- 装饰者模式 Decoration
1.什么是装饰者模式 动态给对象增加功能,从一个对象的外部来给对象添加功能,相当于改变了对象的外观,比用继承的方式更加的灵活.当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列 ...
随机推荐
- 一些JavaScript中的DOM的优化小技巧
在进行DOM优化时需要关注的问题有:修改DOM的时候,会引起页面的重排,重绘.因为JS是单线程执行的,那么在重排重绘的过程中可能会阻塞用户的操作.为了更好的用户体验,必须要严格控制这些操作. 一.对象 ...
- iOS - CoreData 数据库存储
1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...
- Visual Studio最常用、最高效的快捷键
查了一些VS编程的快捷键,大家共同学习,共同进步! 1.强迫智能感知:Ctrl+J.智能感知是Visual Studio最大的亮点之一,选择Visual Studio恐怕不会没有这个原因. 2.强迫显 ...
- netperf安装及使用
一.简介 Netperf是由惠普公司开发的,测试网络栈.即测试不同类型的网络性能的benchmark工具,大多数网络类型TCP/UPD端对端的性能,得到网络上不同类型流量的性能参数.Netperf根据 ...
- android Glide图片加载框架的初探
一.Glide图片加载框架的简介 谷歌2014年开发者论坛会上介绍的图片加载框架,它让我们在处理不管是网路下载的图片还是本地的图片,减轻了很多工作量, 二.开发步骤: 1.添加链接库 compile ...
- centos中安装字体
转载自:http://blog.csdn.net/wlwlwlwl015/article/details/51482065 在使用phantomjs做自动化网页截图时,发现截图都没有文字.最后好久才发 ...
- 日期时间组件 - layui.laydate
全部参数 一.核心方法:laydate(options); options是一个对象,它包含了以下key: '默认值' { elem: '#id', //需显示日期的元素选择器 event: 'cli ...
- Android编译环境折腾记
题记:感觉是时候写点什么了=_=! 第一次安装了ubuntu14.04.5,官网下载的iso,官网下的jar,编译android4.x需要安装jdk6,更高的版本会有问题,baidu到很多搭建环境的步 ...
- ActiveReport 同一单元格内图片跟文字按条件显示
ActiveReports支持提供Image控件来显示图片素材,Image控件的值可以为图像的二进制流,图像路径,或url等:而在很多情况下,图片是签名扫描文件,并不会一直有值.如果图片的值为空,则显 ...
- js中Json 对象,Json字符串转换
//tmppcd 是一个对象 //JSON.stringify() 是把对象转换成json 字符串