黑马程序员技术交流社区

标题: 用装饰设计模式模拟BufferedReader类中,的readLine方法 [打印本页]

作者: 黑马-小龙    时间: 2013-3-4 03:38
标题: 用装饰设计模式模拟BufferedReader类中,的readLine方法
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();
        }
}
个人对装饰设计模式的总结:它对程序进行了功能的增强,比继承更灵活些


作者: 明锦添    时间: 2013-3-4 22:09
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();
}
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2