黑马程序员技术交流社区

标题: 关于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