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.什么是装饰者模式 动态给对象增加功能,从一个对象的外部来给对象添加功能,相当于改变了对象的外观,比用继承的方式更加的灵活.当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列 ...
随机推荐
- WebUpLoder 能自动预览,能多实例,包括后台demo
样式在网上找的.样子: 懒得写别的了,代码里面我写的注释挺详细的:https://github.com/zhangsai521314/WebUpLoder 写文不易,转载请注明出处:http://ww ...
- contiki-process_run()
process_run()函数位于main函数中 ) { do { } ); idle_count++; } 找到函数的声明处: /** * Run the system once - call po ...
- htmlFormat
import java.text.SimpleDateFormat; import org.apache.log4j.HTMLLayout; import org.apache.log4j.Layou ...
- C语言的总结
在C语言考试的中,我成绩不是很好,其实在学习C语言的时候我没有好好去学过,我知道了是我自己的错误,我不应该抱着侥幸的心里去上课的,我会去好好听课的哦l
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 更新关系数据
Updating related data¶ 7 of 7 people found this helpful The Contoso University sample web applicatio ...
- 搜集资料&安装环境
开始入坑DSP,芯片是TI的TMS320C6678,硬件平台为TI官方的TMS320C6678L开发板. 官方给的资料有很多,各种用户手册.软件支持包,眼花缭乱.先尝试把开发环境搭起来,跑个Hello ...
- poll()函数的使用
分类: LINUX poll函数用于监测多个等待事件,若事件未发生,进程睡眠,放弃CPU控制权,若监测的任何一个事件发生,poll将唤醒睡眠的进程,并判断是什么等待事件发生,执行相应的操作.poll函 ...
- JS 劫持来源网站并做指定跳转
有时候给网站做流量,免不了要做一些网站劫持的JS跳转,这里贴上一段劫持来源网站的JS跳转方法,很简单 <script> // 获取来源网站 var slyar = document.ref ...
- 转网页WB.ExecWB控件打印方法
网页WB.ExecWB控件打印方法 2010-02-01 12:48 代码: <table width="100%" cellpadding="1" on ...
- 懒加载实现的分页&&网站footer自适应
最近在做手机端,发现下拉刷新和上拉加载的jq控件很少而且自我感觉不好用,比如iscroll之类-- 然后自己写了个懒加载的,也很简单,最基础的代码[不喜勿喷,但蛮实用的] wap手机端懒加载分页: 用 ...