博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中I/O库的设计原则
阅读量:5268 次
发布时间:2019-06-14

本文共 2356 字,大约阅读时间需要 7 分钟。

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

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是一个适配器类:

参考:

转载于:https://www.cnblogs.com/sxmcACM/p/4412044.html

你可能感兴趣的文章
P1970 花匠
查看>>
query和exec区别
查看>>
java语言与java技术
查看>>
南阳22
查看>>
分享一次在Windows Server2012 R2中安装SQL Server2008
查看>>
NOIP2016提高A组五校联考2总结
查看>>
OpenStack_Glance
查看>>
Spring PropertyPlaceholderConfigurer数据库配置
查看>>
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
查看>>
Python日期计算
查看>>
用css3绘制你需要的几何图形
查看>>
对其他团队的项目的意见或建议
查看>>
iOS 项目的编译速度提高
查看>>
机房收费系统——报表
查看>>
How to unshelve many shelves at same time
查看>>
table中checkbox选择多行
查看>>
动态链接库
查看>>
Magento开发文档(三):Magento控制器
查看>>
使用Docker官方的Django包【转】
查看>>
SuperSocket 学习
查看>>