`
fjjiaboming
  • 浏览: 33330 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JDK API , java io 笔记整理--从模式看JDK IO

阅读更多
Java I/O库的设计原则

  Java语言的I/O库是对各种常见的流源,流汇以及处理过程的抽象化。客户端的Java程序不必知道最终的流源,流汇是磁盘上的文件还是数组等;也不必关心数据是否经过缓冲的,可否按照行号读取等处理的细节。

  书中提到了,对于第一次见到Java/IO库的人,无不因为这个库的庞杂而感到困惑;而对于熟悉这个库的人,而又常常为这个库的设计是否得当而争论不体。书的作者提出自己的意见,要理解Java I/O这个庞大而复杂的库,关键是要掌握两个对称性跟两个设计模式模式。

  Java I/O库具有两个对称性,它们分别是:

  1 输入-输出对称性,比如InputStream和OutputStream各自占据Byte流的输入与输出的两个平行的等级结构的根部。而Reader和Writer各自占据Char流的输入与输出的两个平行的等级结构的根部。

  2 byte-char对称,InputStream和Reader的子类分别负责Byte和Char流的输入;OutputStream和Writer的子类分别负责Byte和Char流的输出,它们分别形成平行的等级结构。

  Java I/O库的两个设计模式:

  Java的I/O库总体设计是符合装饰者模式(Decorator)跟适配器模式(Adapter)的。如前所述,这个库中处理流的类叫做流类。引子里所谈到的FileInputStream,FileOutputStream,DataInputStream及DataOutputStream都是流处理器的例子。

  1 装饰者模式:在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处理器。装饰者模式是Java I/O库的整体设计模式。这样的一个原则是符合装饰者模式的,如下图所示:

  2 适配器模式:在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器是对其它类型的流源的适配。这就是适配器模式的应用,如下图所示。

  适配器模式应用到了原始流处理器的设计上面,构成了I/O库所有流处理器的起点。

  JDK为程序员提供了大量的类库,而为了保持类库的可重用性,可扩展性和灵活性,其中使用到了大量的设计模式,本文将介绍JDK的I/O包中使用到的Decorator模式,并运用此模式,实现一个新的输出流类。

  Decorator模式简介

  Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性。

  有时候,我们需要为一个对象而不是整个类添加一些新的功能,比如,给一个文本区添加一个滚动条的功能。我们可以使用继承机制来实现这一功能,但是这种方法不够灵活,我们无法控制文本区加滚动条的方式和时机。而且当文本区需要添加更多的功能时,比如边框等,需要创建新的类,而当需要组合使用这些功能时无疑将会引起类的爆炸。

  我们可以使用一种更为灵活的方法,就是把文本区嵌入到滚动条中。而这个滚动条的类就相当于对文本区的一个装饰。这个装饰(滚动条)必须与被装饰的组件(文本区)继承自同一个接口,这样,用户就不必关心装饰的实现,因为这对他们来说是透明的。装饰会将用户的请求转发给相应的组件(即调用相关的方法),并可能在转发的前后做一些额外的动作(如添加滚动条)。通过这种方法,我们可以根据组合对文本区嵌套不同的装饰,从而添加任意多的功能。这种动态的对对象添加功能的方法不会引起类的爆炸,也具有了更多的灵活性。

  以上的方法就是Decorator模式,它通过给对象添加装饰来动态的添加新的功能。如下是Decorator模式的UML图:

  Component为组件和装饰的公共父类,它定义了子类必须实现的方法。

  ConcreteComponent是一个具体的组件类,可以通过给它添加装饰来增加新的功能。

  Decorator是所有装饰的公共父类,它定义了所有装饰必须实现的方法,同时,它还保存了一个对于Component的引用,以便将用户的请求转发给Component,并可能在转发请求前后执行一些附加的动作。

  ConcreteDecoratorA和ConcreteDecoratorB是具体的装饰,可以使用它们来装饰具体的Component.

 

 

Java IO教程 如果您对Decorator模式非常了解,就能轻易地看出Java的IO类结构:

根接口是InputStream/OutputStream,

充当数据源的IO类有ByteArrayInputStream/ByteArrayOutputStream,FileInputStream/FileOutputStream,PipedInputStream/PipedOutputStream等,

充当装饰功能的IO类有BufferedInputStream/BufferedOutputStream,DataInputStream/DataOutputStream,LineNumberInputStream,PushbackInputStream等,它们都是继承装饰接口FilterInputStream/FilterOutputStream。

使用IO时,首先创建一个数据源IO,然后根据需要的功能创建装饰类IO,其构造函数的参数为已创建的数据源IO。

 

 

从Decorator,Adapter模式看Java/IO库(一)

http://www.360doc.com/content/08/0902/22/63912_1604180.shtml



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有应聘"Java/Golang,工程师/架构师", 请发邮件至: linzuxiong1988@gmail.com, 并取得联系.
工程师招聘,岗位见: http://job.youzan.com 请联系我: linzuxiong1988@gmail.com
分享到:
评论

相关推荐

    Java API 文档 jdk-17.0.2-doc-all

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、枚举和注解的详细说明。这份"jdk-17.0.2_doc-all"文档集全面覆盖了Java 17.0.2版本的特性,是理解、学习和使用Java编程...

    commons-io-2.7-API文档-中文版.zip

    包含翻译后的API文档:commons-io-2.7-javadoc-API文档-中文(简体)版.zip; Maven坐标:commons-io:commons-io:2.7; 标签:commons、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index....

    jdk8 java8 linux版 jdk-8u162-linux-x64.tar.zip

    Java开发工具包(Java Development Kit,简称JDK)是Oracle公司发布的用于开发和运行Java应用程序的重要工具集。这里我们关注的是JDK 8u162的Linux版本,即"jdk8 java8 linux版 jdk-8u162-linux-x64.tar.zip"。这个...

    jdk1.7 java官网正式版Windows 64位-jdk-7u80-windows-x64.exe

    在文件系统操作方面,JDK 1.7引入了NIO.2(New IO 2.0),提供了更好的异步I/O支持和更高级的文件操作,如文件通道、路径API和文件属性查询等。这些新特性极大地提高了开发者处理文件系统的灵活性和效率。 在安全性...

    JDK-API 1.7和JDK-API1.6

    **JDK-API 1.7 和 JDK-API 1.6:Java 开发工具包的关键更新与差异** **一、JDK-API 的概述** JDK(Java Development Kit)是Oracle公司提供的用于开发Java应用程序的工具集,它包含了Java编译器、Java虚拟机(JVM)...

    jdk-7u67-linux-x64.tar.gz

    - **文件系统API**:提供了新的文件系统API,以替代旧的java.io.File类。 - **并发工具增强**:增强了并发工具包,如ForkJoin框架等。 ### 五、总结 “jdk-7u67-linux-x64.tar.gz”是一个针对Linux 64位系统的JDK ...

    jdk-8u162-linux-x64

    4. **Java类库**:JDK包含了大量的预定义类和接口,它们构成了Java标准版(Java SE)的一部分,如`java.lang`、`java.util`和`java.io`等包,提供了基础的输入/输出、集合框架、多线程等功能。 5. **Java文档生成器...

    64位正版jdk-7u80-windows-x64(安装版)

    **Java Development Kit (JDK) 1.7 for 64-bit Windows** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的重要工具集。标题中的"64位正版jdk-7u80-windows-x64(安装版)"指的是适用于64...

    Java文档-jdk-6u10-docs-java类库6.0-高压缩第二部分

    Java文档是学习和理解Java开发工具包(JDK)的核心资源,它包含了详细的API文档、技术笔记和技术规范。本部分主要关注的是Java类库6.0版本,具体为"Java文档-jdk-6u10-docs"的第二部分。在这一部分中,我们将深入...

    java学习软件安装包(二)_jdk-8u181-windows-x64

    掌握Java开发不仅需要安装JDK,还需要学习Java语法、面向对象编程、异常处理、IO流、多线程、网络编程、数据库连接等基础知识。同时,熟悉Java的开发工具,如Eclipse、IntelliJ IDEA或NetBeans,以及Maven或Gradle等...

    jdk1.7-7u79-windows32-i586

    总之,JDK 1.7 Update 79是Java开发的重要里程碑,它引入了一系列语言和API的改进,提升了开发者的生产力和代码质量,尤其是在处理资源管理、异常处理、字符串操作等方面。对于需要在32位Windows环境下进行Java 7...

    java api文档jdk-6u30-apidocs

    在“java api文档jdk-6u30-apidocs”中,我们可以找到以下几个关键知识点: 1. **核心类库**:Java API包含了大量核心类库,如`java.lang`、`java.util`和`java.io`等。`java.lang`是所有Java程序的基础,包含了...

    JDK版本:jdk-8u162-windows-x64.exe资源与安装教程

    Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。本教程将详细讲解JDK 8u162 for Windows的下载、安装以及配置过程。 首先,我们来看一下JDK ...

    jdk-6u45-windows-x64.rar

    5. **Java类库** (JRE): 包含了Java标准版API,如基础类库、IO流、网络编程、多线程、集合框架等,这些类库为开发者提供了丰富的功能。 6. **其他工具**: 如jar(打包和管理Java归档文件)、appletviewer(用于本地...

    Java中文JDK_API帮助文档1-13共26分卷

    《Java中文JDK_API帮助文档1-13共26分卷》是针对Java开发者极其重要的参考资料,它包含了从基础到高级的Java开发所需的所有API(应用程序编程接口)的详细说明,以中文语言呈现,方便中国开发者理解和使用。...

    离线JDK9中文版 | API_jdk-9.CHM

    这个离线JDK9中文版的API文档,即`API_jdk-9.CHM`,是开发者在没有网络连接时查阅Java 9 API的重要参考资料。CHM(Compiled Help Manual)是一种Windows平台下的帮助文件格式,它将一系列HTML页面编译成一个单一的...

    jdk-8u162-windows-x64官方原版

    4. **Java类库**:JDK附带了大量的类库,如基础类库(java.lang)、输入/输出(java.io)、网络编程(java.net)、集合框架(java.util)等,这些库为开发者提供了丰富的API,大大简化了开发过程。 在JDK 8中,一些...

    jdk-17.0.1-doc-all.zip

    标题中的"jdk-17.0.1-doc-all.zip"表明这是一个关于Java Development Kit(JDK)17.0.1版本的文档压缩包,其中包含了完整的Java API文档。Java API是Java编程语言的核心组成部分,提供了大量的类和接口,使得开发者...

    API帮助文档(.JDK-API-1-6-zh-CN)

    综上所述,《API帮助文档(.JDK-API-1-6-zh-CN)》是Java开发者的必备工具,通过阅读和理解文档,开发者能够更好地理解和使用Java 1.6中的各种API,编写出高效、稳定的代码。同时,随着Java版本的迭代,开发者也应该...

    [java软件技术文档chm].JDK-API-1-6-zh-CN

    【标题】:“[java软件技术文档chm].JDK-API-1-6-zh-CN” 指的是Java软件技术的文档,它是一个以CHM(Microsoft编译的HTML帮助文件)格式存在的JDK(Java Development Kit)API(应用程序编程接口)的1.6版本的中文...

Global site tag (gtag.js) - Google Analytics