java IO流之装饰者
我们知道在java整个IO流的API设计中大量采用了装饰者模式进行设计。而装饰者模式最主要的特征是可以创建自己装饰者的装饰者,因此我们可以利用IO流中采用了装饰者这个特征根据需求去扩展自己的IO流。
例如现在有这样一个需求:读取一个文件里面的内容,将文件里的内容所有的小写字母都转换成大写的。这个时候我们就可以通过去扩展IO流去做。
package com.unis.io;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FilterReader;import java.io.IOException;import java.io.Reader;public class UppCaseReader extends FilterReader {public UppCaseReader(Reader in) {super(in);}@Overridepublic int read(char[] cbuf, int off, int len) throws IOException {int result = super.read(cbuf, off, len); for(int i=off;i<len;i++){if(cbuf[i]>='a'&&cbuf[i]<='z'){cbuf[i] -= 32;}}return result;}//@Override//public int read() throws IOException {//int result = super.read();//if(result>='a'&&result<='z'){//result-=32;//}//return result;//}public static void main(String[] args) throws IOException {Reader reader = new BufferedReader(new UppCaseReader(new FileReader(new File("src/com/unis/io/UppCaseReader.java"))));int i =0;while((i=reader.read())!=-1){System.out.print((char)i);}}}