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. Java网络编程初探

    IP地址案例 package ch17; import javax.swing.text.Style; import java.net.InetAddress; /** * Created by Ji ...

  2. 个人psp

    排球计分程序 1.计划 通过对用户故事估计这个任务需要3~5d天. 2.开发 2.1需求分析 作为一个观众,我希望了解每场比赛的比分,以便了解比赛的情况. 作为一个观众,我希望输入球队名称查询球队比分 ...

  3. onInterceptTouchEvent / onTouchEvent响应事件的详析

    onInterceptTouchEvent(),onTouchEvent() 默认返回false 注:事件分发机制是由 dispatchTouchEvent() 开始分发的 onInterceptTo ...

  4. python3 三级菜单

    python版本3.5 功能: 1.程序执行显示一级菜单,输入内容进入二级菜单: 2.进入二级菜单后,输入二级菜单内容,进入三级菜单:输入b返回一级菜单: 3.进入三级菜单后,输入b返回二级菜单. # ...

  5. codeforces #369div2 B. Chris and Magic Square

    题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等 题目链接:http://codeforces.com/contest/711/problem/B 分析:题目不难,找到要 ...

  6. css权值计算

    外部样式表<内部样式表<内联样式: HTML 标签选择器的权值为 1: Class 类选择器的权值为 10: ID 选择器的权值为 100: 内联样式表的权值最高 1000: !impor ...

  7. ARM+LINUX 项目学习总结

    一.确定功能 二.系统移植 1. 根据具体板子修改u-boot (三星的开发板资料) 2. 根据具体板子和功能修改内核 (基本的驱动) 3. 移植busybox 三.驱动修改编写 四.应用编程 附1 ...

  8. 动态加载zTree,用key属性设置url链接、icon图标等

      setting 举例 1. 设置 zTree 显示节点时,将 treeNode 的 xUrl 属性当做节点链接的目标 URL var setting = { data: { key: { url: ...

  9. mybatis高级(1)(入门回顾)

    首先入门案例(并且拿到新增记录当前id) 1.创建mybatis-config.xml文件 <?xml version="1.0" encoding="UTF-8& ...

  10. 微信 URL Scheme详细参数

    weixin:// "weixin://dl/stickers""weixin://dl/games""weixin://dl/moments&quo ...