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系统----再看装饰者模式的更多相关文章

  1. 装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用

    通过模拟咖啡馆的点单系统来剖析装饰者模式的使用 参考:https://blog.csdn.net/gududedabai/article/details/81989196 一).传统的点单系统构建,每 ...

  2. Java 的设计模式之一装饰者模式

    刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行 ...

  3. Java设计模式之装饰者模式

    要实现装饰者模式,注意一下几点内容: 1.装饰者类要实现真实类同样的接口 2.装饰者类内有一个真实对象的引用(可以通过装饰者类的构造器传入) 3.装饰类对象在主类中接受请求,将请求发送给真实的对象(相 ...

  4. 结合JDK源码看设计模式——装饰者模式

    定义 在不改变原有对象的基础之上,将功能附加到对象上 适用场景 扩展一个类的功能 动态的给对象增加功能,当功能不需要的时候能够动态删除 详解 在看到定义的时候,可能很多人会想,这不就是继承吗?的确很像 ...

  5. JavaIO模型--装饰者模式

    JavaIO体现出装饰者的设计模式 今天在学SparkRDD之前,听了一堂复习JavaIO的课,觉得讲得不错 Java的IO一直让我觉得一层一层的很麻烦,刚接触的时候,理不太清楚 只知道要分解为输入输 ...

  6. 再起航,我的学习笔记之JavaScript设计模式13(装饰者模式)

    装饰者模式 装饰者模式(Decorator): 在不改变原对象的基础上,通过对其进行过包装拓展(添加属性高或者方法)使原有对象可以满足用户的更复杂需求. 如果现在我们有个需求,需要做一个提交表单,当我 ...

  7. 由孙悟空的七十二变看Java设计模式:装饰者模式

    目录 应用场景 代码示例 改进代码 装饰者模式 定义 意图 主要解决问题 何时使用 优缺点 孙悟空的七十二变 应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减5 ...

  8. 解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解

    package day02; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...

  9. 装饰者模式 Decoration

    1.什么是装饰者模式 动态给对象增加功能,从一个对象的外部来给对象添加功能,相当于改变了对象的外观,比用继承的方式更加的灵活.当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列 ...

随机推荐

  1. JDBC + MySQL 示例

    jdbc mysql connection 教程 翻译自:JDBC MySQL Connection Tutorial Java Database Connectivity (JDBC) 是一个基于J ...

  2. c++ STL 学习记录 草稿。

    非常丑陋的尝试实现stl.慢慢修改吧. 1)简单实现 vector和list. 2)思索如何开始编写算法. 1,所有容器继承一个抽象容器.那么算法就可以使用抽象基类的next方法来遍历元素. 容器间耦 ...

  3. 上传文件fileupload

    文件上传: 需要使用控件-fileupload 1.如何判断是否选中文件? FileUpload.FileName -  选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.va ...

  4. Maven 打成 Webjar的方法

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/45666789 *************************************** ...

  5. CSS3中的伪类选择器详解

      类选择器和伪类选择器区别 类选择器我们可以随意起名,而伪类选择器是CSS中已经定义好的选择器,不可以随意起名. 伪类选择器以及伪元素 我们把它放到这里 p.aaas{ text-align: le ...

  6. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

  7. Spring中servletFileUpload完成上传文件以及文本的处理

    JSP: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnco ...

  8. webbench---linux压测工具

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 1.适用系统:Linux-CentOs 2.编译安 ...

  9. express+gulp构建项目(五)swig模板

    这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...

  10. 项目公共js(vue.js)

    var urlHead = "http://hm.runorout.com/";// var urlHead = "/";/*加入跑班相关*/var urlGe ...