一、InputStream和OutputStream
I/O类库中经常使用流这个概念,流指的是有能力产出数据的数据源对象或有能力接收数据的接收端对象。在java流的使用过程中,很少使用单一的类来创建流对象,而是通过使用别的流来“装饰”来达到想要的功能,“装饰”的前提是装饰器与它装饰的对象有同样的接口。在下图中的FilterInputStream和FilterOutputStream就是这样一种具有“装饰”功能的接口,具体实现由其子类完成。例如,DataInputStream,BufferedInputStream就可以装饰ByteArrayInputStream,StringBufferInputStream等。
二、Reader和Writer
Reader和Writer与InputStream和OutputStream的继承结构非常相似,之所以出现Reader和Writer是因为InputStream和OutputStream
是8位的面相字节的处理方式,不能很好地处理16位的Unicode字符。联系:InputStreamReader可以将InputStream转为Reader,
OutputStreamWriter可以将OutputStream转为Writer。
装饰器对比
FilterInputStream FilterOutputStream
|--DataInputStream |--DataOutputStream
|--BufferedInputStream |--BuffereOutputStream
|--PrintStream
FiterReader FilterWriter
|--BufferedReader DataOutputStream
(如果使用readLine()的情况, BufferedWriter
用DataInputStream) PrintWriter
|--BufferedReader
注意:BufferedWriter不是FilterWriter的子类,FilterWriter是抽象类,没有任何子类,把它放在那儿只是占位作用。