`

java.io.*中的设计模式及总结

阅读更多
知识点一: 四大等级结构

  java语言的i/o库提供了四大等级结构:InputStream,OutputStream,Reader,Writer四个系列的类。InputStream和OutputStream处理8位字节流数据, Reader和Writer处理16位的字符流数据。InputStream和Reader处理输入, OutputStream和Writer处理输出。大家一定要到J2SE文档中看看这四大等级结构的类继承体系。

  除了这四大系列类,i/o库还提供了少数的辅助类,其中比较重要的是InputStreamReader和OutputStreamWriter。InputStreamReader把InputStream适配为Reader, OutputStreamWriter把OutputStream适配为Writer;这样就架起了字节流处理类和字符流处理类间的桥梁。

  您使用i/o库时,只要按以上的规则,到相应的类体系中寻找您需要的类即可。

  知识点二: 适配功能

  java i/o库中的继承不是普通的继承;它的继承模式分为两种,其一就是Adapter模式(具体分析请参见<<java与模式>>一书) 。下面以InputStream类体系为例进行说明。

  InputStream有7个直接子类:ByteArrayInputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,ObjectInputStream和SequenceInputStream。前四个采用了Adapter模式,如FileInputStream部分代码如下:
Public class FileInputStream extends InputStream
  {
  /* File Descriptor - handle to the open file */
  private FileDescriptor fd;
  public FileInputStream(FileDescriptor fdObj)
  {
   SecurityManager security = System.getSecurityManager();
  if (fdObj == null) {
  throw new NullPointerException();
  }
  if (security != null) {
  security.checkRead(fdObj);
  }
  fd = fdObj;
  }
  //其他代码
  }

 

  可见,FileInputStream继承了InputStream,组合了FileDescriptor,采用的是对象Adapter模式。我们学习i/o库时,主要应该掌握这四个对象Adapter模式的适配源: ByteArrayInputStream的适配源是Byte数组, FileInputStream的适配源是File对象, PipedInputStream的适配源是PipedOutputStream对象, StringBufferInputStream的适配源是String对象。其它三个系列类的学习方法与此相同。

  知识点三: Decorator功能

  InputStream的其它三个直接子类采用的是Decorator模式,<<java与模式>>中描述得比较清楚,其实我们不用管它采用什么模式,看看代码就明白了。 FilterInputStream部分代码如下:
Public class FilterInputStream extends InputStream {
  /**
  * The input stream to be filtered.
 */
  protected InputStream in;
  protected FilterInputStream(InputStream in) {
  this.in = in;
  }
  //其它代码
  }


  
  看清楚没有? FilterInputStream继承了InputStream,也引用了InputStream,而它有四个子类,这就是所谓的Decorator模式。我们暂时可以不管为什么要用Decorator模式,但我们现在应该知道:因为InputStream还有其它的几个子类,所以我们可以将其它子类作为参数来构造FilterInputStream对象!这是我们开发时常用的功能,代码示例如下:

{
  //从密钥文件中读密钥
  SecretKey key=null;
  ObjectInputStream keyFile=new ObjectInputStream(
  new FileInputStream("c:\\安全文件\\对称密钥\\yhb.des"));
  key=(SecretKey)keyFile.readObject();
  keyFile.close();
  }
  
  上面的代码中, ObjectInputStream也是InputStream的子类,也使用了Decorator功能,不过,就算你不懂也不想懂Decorator模式,只要记住本文给出的FilterInputStream 的两段代码即可。

  掌握了以上三点,相信我们已经能够很好的应用java i/o库。

分享到:
评论

相关推荐

    Java设计模式

    下面是JDK中有关23个经典设计模式的示例: Structural(结构模式) Adapter: 把一个接口或是类变成另外一种。 ● java.util.Arrays#asList() ● javax.swing.JTable(TableModel) ● java.io.InputStreamReader...

    Scalable IO in Java.zip

    Scalable IO in Java是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的...

    Java基础知识点总结.docx

    设计模式总结★★★★★ 247 二十二、 Java其他总结 248 Java JVM知识点总结 248 equals()方法和hashCode()方法 270 数据结构 273 Array方法类汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种...

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    JAVA设计模式之适配器模式.docx

    适配器模式在源码中的应用: (1)JDK源码的IO模块用到,例如 java.io.InputStreamReader(InputStream)、java.io.OutputStreamWriter(OutputStream)。 (2)mybatis源码日志模块用到对象适配器模式。

    Java源码包100个设计实例.zip

    Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ...

    Java_IO完全总结

    介绍JAVA IO相关的历史背景,io的简单分类、与io设计相关的设计模式,最后几个例子。

    java学习笔记1(java io/nio)

    java学习笔记1(java io/nio)设计模式

    java语言程序设计 java编程笔记 由浅入深的笔记 共32份 全套资源.rar

    【完整课程列表】 API集合.docx clone.docx Date日期.docx GC垃圾回收机制.docx ...设计模式.docx 数组.docx 网络编程.docx 线程和内部类.docx 循环和类对象.docx 异常.docx 正则表达式.docx 总结.docx

    java版飞机大战源码-Rockira.github.io:Rockira.github.io

    7种常见的设计模式和使用场景 Java必会基础与新版本特性 :hot_beverage:深入浅出JVM JVM内存模型 性能调优、线上问题排查 类加载机制详解 垃圾回收机制 垃圾回收器、垃圾回收算法 :jack-o-lantern:拓展知识 :open_...

    JavaAPI中文chm文档 part2

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    J2SE技术总结-Java学习精华教程-电子书

    接口和抽象类相关设计模式 .....GUI(图形用户界面)和Applet ..........GUI_添加组件 ..........GUI_添加事件 ..........GUI_双缓冲作图 ..........Applet .....异常处理 ..........概述 ..........异常处理 ...........

    Java 1.6 API 中文 New

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    JavaAPI1.6中文chm文档 part1

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    Java SE编程入门教程 java设计模式(共17页).pptx

    Java SE编程入门教程 java设计模式(共17页).pptx Java SE编程入门教程 java数组(共33页).pptx Java SE编程入门教程 java网络编程(共29页).pptx Java SE编程入门教程 java线程(共61页).pptx Java SE编程入门...

    Java SE编程入门教程 java IO(共28页).pptx

    Java SE编程入门教程 java设计模式(共17页).pptx Java SE编程入门教程 java数组(共33页).pptx Java SE编程入门教程 java网络编程(共29页).pptx Java SE编程入门教程 java线程(共61页).pptx Java SE编程入门...

    源码:阎宏设计模式光盘

    com.javapatterns.javaio 专题:设计模式在Java I/O中的应用 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.liskov 里氏代换原则 com.javapatterns.lod 迪米特法则 ...

    jdk-study:jdk原始码学习,包含jdk1.7&1.8&1.9的原始码,会以注释的形式添加自己的理解

    JDK原始码【1.9】,预设系统,JShell,集合工厂方法等学习设计模式过程中总结的jdk中相关的设计模式结构(结构模式)适配器:把一个接口或类变成另外一种。 * java.util.Arrays#asList()* javax.swing.JTable...

    java jdk-api-1.6 中文 chmd

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    JAVA面试经典整合

    1.Git 2.HTTP 3.Java IO 4.Java 基础 5.Java 容器 6.Java 并发 7.Java 虚拟机 8.Leetcode 题解 9.Leetcode-Database 题解 10.Linux 11.MySQL 12.Redis ...28.设计模式 29.重构 30.集群 31.面向对象思想

Global site tag (gtag.js) - Google Analytics