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

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/4412044.html
Copyright © 2011-2022 走看看