zoukankan      html  css  js  c++  java
  • Java中I/O库的设计原则

    面试中遇到了此类题目,再次做个记录,以备只需!

    1.在Java的I/O中有两个设计的结构:装饰模式和适配器模式

    2.Java库中的对称性:

    (1)输出-输入对称:处理Byte流的InputStream和OutputStream;处理Char流的Reader和Writer。

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

    3.模式应用:

    装饰模式:

    InputStream的装饰模式

    装饰模式的各个角色:

    (1)抽象构件(Component)角色:由InputStream扮演。这是一个抽象类,为各种子类型流处理器提供统一的接口。

    (2)具体构件(ConcreteComponent)角色:由ByteArrayInputStream、FileInputStream、 PipedInputStream以及StringBufferInputStream等原始流处理器扮演。他们实现了抽象构件角色所规定的接口,可以被 链接流处理器所装饰。

    (3)抽象装饰(Decorator)角色:由FilterInputStream扮演。它实现了InputStream所规定的接口。

    (4)具体装饰(ConcreteDecorator)角色:由几个类扮演,分别是DataInputStream、BufferInputStream以及两个不常用的类LineNumberInputStream和PushBackInputStream

    注意:StringBufferInputStream、LineNumberInputStream已经过时,不再推荐使用。

    OutputStream的装饰模式:

    装饰模式中的各个角色:

    (1)抽象构件(Component)角色:由OutputStream扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

    (2)具体构件(ConcreteComponent)角色:由ByteArrayOutputStream、FileOutputStream以及PipedOutputStream等扮演,它们均实现了OutputStream所声明的接口。

    (3)抽象装饰(Decorator)角色:由FilterOutputStream扮演。它有与OutputStream相同的接口,而这正是装饰类的关键。

    (4)具体装饰(ConcreteDecorator)角色:由几个类扮演,分别是BufferedOutputStream、DataOutputStream,以及PrintStream。

    Reader中的装饰模式:

    装饰模式中的各个角色:

    (1)抽象构件(Component)角色: 由Reader扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

    (2)具体构件(ConcreteComponent)角色:有CharArrayReader、InputStreamReader、PipedReader以及StringReader等扮演,它们均实现了Reader所声明的接口

    (3)抽象装饰(Decorator)角色:由BufferedReader以及FilterReader扮演。这两者有着与Readeer相同的接口,而这正是装饰类的关键

    (4)具体装饰(ConcreteD)角色:分别是LineNumberReader作为BufferedReader的具体装饰角色,PushbackReader作为FilterReader的具体装潢角色。

    Writer中的装饰模式:

    装饰模式中的各个角色:

    (1)抽象构件(Component)角色:由Writer扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

    (2)具体构件(ConcreteComponent)角色:由CharArrayWriter、OutputStreamWriter、PipedWriter以及StringWriter等扮演,它们均实现了Reader所声明的接口。

    (3)抽象装饰(Decorator)角色:由BufferedWriter、FilterWriter以及PrintWriter扮演,它们有着与Writer相同的接口。

    (4)具体装饰(ConcreteDecorator)角色:是与抽象装饰角色合并的。由于抽象装饰角色与具体装饰角色发生合并,因为装饰模式在这里被简化了。

    -----------------------------------------------------华丽的分割线----------------------------------------------------------------

    适配器模式的应用:

    ByteArrayInputStream是一个适配器类:

    FileOutputStream是一个适配器类:

    StringBufferInputStream是一个适配器类:

    ByteArrayOutputStream是一个适配器类:

    PipedOutputStream是一个适配器类:

    CharArrayReader是一个适配器类:

    StringReader是一个适配器类:

    其他,关于InputStreamReader,PipedReader等也都是适配器类。

    CharArrayWriter是一个适配器类:

    PipedWriter是一个适配器类:

    StringWriter是一个适配器类:

    参考:

    http://www.2cto.com/kf/201404/291510.html

    http://my.oschina.net/gao0516/blog/136103

  • 相关阅读:
    mysql中Can't connect to MySQL server on 'localhost' (10061)
    Win7系统中提示:本地无法启动MySQL服务,报的错误:1067,进程意外终止的解决方法。
    Class.forName()用法详解
    ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
    Struts2的模板和主题theme及自定义theme的使用
    sql中 in 、not in 、exists、not exists 用法和差别
    JavaScript的replace方法与正则表达式结合应用讲解
    Caused by: java.lang.NoClassDefFoundError at com.jc.zm.ZmAlarmAction.analyDo(ZmAlarmAction.java:198)
    打开jsp页面时,显示空白页。
    chown命令详情
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/4412044.html
Copyright © 2011-2022 走看看