承接上文,我们来看看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
4. 装饰者超类:继承自Reader,可以用于装饰“3.输入相关的基本类”
5. 装饰者类:可以用于装饰“3.输入相关的基本类”
举例:
[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]
[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]