Java IO 中的装饰者(Decorator)模式(二)

承接上文,我们来看看Reader和InputStream的关系。

[b]Reader(Writer): 提供兼容Unicode和面向字符的I/O功能。[/b]

设计Reader(Writer)的目的:
1. 并不是用来代替InputStream(OutputStream)。
2. 主要是为了国际化: 1.0提供的老的I/O流结构仅仅支持8位字节流,却不能很好地处理16位的Unicode字符。所以(其实Java本身的char也是16位的)为了国际化的目的,在JDK1.1中添加了Reader/Writer。


Reader/Writer也是装饰者模式实现,其结构非常类似于InputStream/OutputStream(包括名称)

[size=medium][b]一. 从Reader入手查看其结构(请参考附件UML图,右边部分)[/b][/size]

1. 输入相关的抽象超类: java.io.Reader

2. 将InputStream转化为Reader的适配器: InputStreamReader,继承自Reader

3. 输入相关的基本类:继承自Reader

StringReader
PipedReader
CharArrayReader
FileReader


4. 装饰者超类:继承自Reader,可以用于装饰“3.输入相关的基本类”

BufferedReader
FilterReader


5. 装饰者类:可以用于装饰“3.输入相关的基本类”

LineNumberReader: 继承自BufferedReader
PushbackReader: 继承自FilterReader


举例:
final BufferedReader in = 
new BufferedReader(new FileReader(fileName));


[size=medium][b]二. Reader和InputStream的对应关系:参考Thinking In Java[/b][/size]
输入相关的基本类:
[table]
|[b]Java I/O 1.0 InputStream[/b] |[b] Java I/O 1.1 Reader[/b]|
|InputStream|Reader|
||适配器: InputStreamReader|
|FileInputStream|FileReader|
|StringBufferInputStream(已过时)|StringReader|
|ByteArrayInputStream(8bit)|CharArrayReader(16bit)|
|PipedInputStream|PipedReader|
[/table]

装饰者类(Filter类)
[table]
|[b]Java I/O 1.0 InputStream[/b] |[b] Java I/O 1.1 Reader[/b]|
|FilterInputStream|FilterReader|
|BufferedInputStream|BufferedReader|
|LineNumberInputStream(已过时)|LineNumberReader|
|PushbackInputStream|PushbackdReader|
[/table]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值