A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.IOException;
import java.io.Reader;

/*
* 用装饰设计模式自己模拟BufferedReader类
* 模拟close()方法,readLine()方法
*/
public class MyBufferedReader {
        private Reader r;
       
        public MyBufferedReader(){}
       
        public MyBufferedReader(Reader r) {
                this.r = r;
        }
       
        //readLine()方法如何模拟呢?
        public String myReadLine() throws IOException{
               
                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);
                        }
                }
               
                //为了避免数据的丢失
                if(sb.length()>0){
                        return sb.toString();
                }
               
                return null;
        }
       
        public void myClose() throws IOException{
                r.close();
        }
}
个人对装饰设计模式的总结:它对程序进行了功能的增强,比继承更灵活些

1 个回复

倒序浏览
import java.io.*;
class MyBufferedReader
{
    private FileReader r;

MyBufferedReader(FileReader r)
{
          this.r=r;
}

//可以一次读一行的数据方法
public String myReadLine() throws IOException
{
        //定义一个临时容器,原BufferedReader封装的是字符数组
        //定义一个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);
    }
    if(sb.length()!=0)
      return sb.toString();
    return null;
}
public void myClose()throws IOException
{
  r.close();
}
}

class  MyBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
  FileReader fr=new FileReader("buf.txt");
  MyBufferedReader myBuf=new MyBufferedReader(fr);
      String line=null;
   while((line=myBuf.myReadLine())!=null)
  {
    System.out.print(line+" ");
   }
   myBuf.myClose();
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马