黑马程序员技术交流社区
标题:
关于MyBufferedReader
[打印本页]
作者:
吴通
时间:
2012-9-3 21:16
标题:
关于MyBufferedReader
/*
MyBufferedReaderZengQiang
*/
import java.io.*;
class MyBufferedReaderZengQiang extends Reader
//为什么要继承Reader?
{
private Reader r;
MyBufferedReader(Reader r)
{
this.r=r;
}
public String myReadLine() throws IOException
{
//定义一个临时容器。原BufferReader封装的是字符数组
//为了演示方便,定义一个StringBuilder,因为最终还是要将数据变成字符串
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
return null;
}
/*
覆盖Reader中的抽象方法
*/
public int read(char[] cbuf,int off,int len)
{
return.r.read(cbuf,off,in);
}
public void close()throws Exception
{
r.close();
}
//自定义关闭方法
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr=new FileReader("buf.txt");
MyBufferedReader mybufr=new MyBufferedReader(fr);
String line=null;
while((line=mybufr.myReadLine())!=null)
{
System.out.println(line);
}
mybufr.myClose();
}
}
为什么要继承
Reader呢?自己定义的类里面的方法可以满足自己的使用要求了,而且继承了Reader还要复写里面的抽象方法,感觉没有增加类的功能,求解!
作者:
彭润生
时间:
2012-9-3 21:21
因为你要覆盖Reader中的read抽象方法,所以需要继承。你也可以写一个装饰类。
作者:
杨习平
时间:
2012-9-3 21:26
public void close()throws Exception
{
r.close();
}
这个问题是这样的你自己想错了,你看你自己写的上边这个方法你调用的不还是reader里的方法。如果你没有继承reader这个类,那么r.close()这方法怎么实现。
所以说这个问题你反过来想你就明白了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2