class MyBufferedReader extends Reader {
Reader r = null;
//使用接口Reader,使用多态特性
MyBufferedReader(Reader r){
this.r = r;
}
//定义读取一行的方法
public String myReadLine()throws IOException{
//定义一个StringBuilder对象,存放一行的数据
StringBuilder sb = new StringBuilder();
int ch = 0;
//读取字符
while((ch = r.read())!=-1){
if(ch == '\r')
continue;
//判断是否换行了,换行就返回这行的数据sb,没有没有换行,就继续添加
if(ch == '\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0) //由于上面只有读取到一行的结束标识,才返回,所以对于最后一行不是整行的数据进行获取,以免丢失
return sb.toString();
return null; //读到文件结尾,返回null
}
@Override //实现Reader的抽象方法
public int read(char[] cbuf, int off, int len) throws IOException {
return r.read(cbuf,off,len);
}
//关闭流资源
public void close() throws IOException {
r.close();
}
public void myClose() throws IOException{
r.close();
}
}
这是毕老师上课讲的装饰模式的一个类,为什么这里要继承Reader呢,装饰类不是说避免继承的吗? |