本帖最后由 Jacky_Chen1990 于 2013-5-4 13:09 编辑
先看一下代码如下:- package com.itheima;
- import java.io.*;
- public class MyBufferedReaderDemo {
- public static void main(String[] args) throws IOException {
- FileReader fr = new FileReader("abc.txt");
-
- MyBufferedReader mbr = new MyBufferedReader(fr);
- String line = null;
- while((line=mbr.myReadLine())!=null){
- System.out.println(line);
- }
- // StringBuilder sb = new StringBuilder();
- //
- // sb.append(true);
- // System.out.println(sb.toString());
- // sb.append("adfadf");
- // System.out.println(sb.toString());
-
- }
- }
- class MyBufferedReader extends Reader {
-
- private FileReader fr = null;
-
- public MyBufferedReader(FileReader fr){
- this.fr = fr;
- }
-
- public String myReadLine() throws IOException {
-
- //定义一个临时容器。原BufferedReader封装的是字符数组
- //为了演示方便,定义一个StringBuilder容器。因为最终还是要将数据变成字符串
- StringBuilder sb = new StringBuilder();
- //sb是累计的加入各种字符,但是在调用时是用while循环,所以似乎读一行,去一行,又从新建立了StringBuilder。
- int ch = 0;
-
- //当读到-1的时候表示已经读到结尾
- while((ch=fr.read())!=-1) {
- //两个if用来在读写达到换行时进行处理
- if(ch=='\r')
- continue;
- if(ch=='\n')
- return sb.toString();
- else
- sb.append((char)ch);
- }
-
- //到达文件的结尾,判断是否需要输出最后一行。
- if(sb.length()!=0)
- return sb.toString();
- //已经到达文件结尾
- return null;
- }
-
- public void myClose() throws IOException {
- fr.close();
- }
- @Override
- public int read(char[] cbuf, int off, int len) throws IOException {
- // TODO Auto-generated method stub
- return fr.read(cbuf,off,len);
- }
- @Override
- public void close() throws IOException {
- // TODO Auto-generated method stub
- fr.close();
- }
- }
复制代码 里面自己定义的MyBufferedReader继承了Reader,并且实现了Reader类中的抽象方法
我想问的就是这个自定义装饰类必须要继承这个Reader么,不是非常的理解。还望解释下,谢谢! |