自定义BufferedReader

缓冲区的建立目的就是增加传输性能,使我们传输数据更加快速

缓冲区的内部其实很简单 就是在内部封装了一个数组 用数组来存储数据 对外提供一些方法对数组进行访问

其中这些方法的操作就是对数组的指针(角标)。

缓冲区的原理:从源中获取一批数据到缓冲区,再从缓冲区中一个一个取出 取完后用-1作为结束标记

在BufferedReader中我们读取数据方法有read() ,readLine()

read() 其参数为char[],cbuf,int off,int len。其返回值为-1
readLine()方法是一行一行的取 其内部就像是一个字符串容器StringBuffder 其返回值为null;

首先定义一个类 在类中定义两个读取数据的方法 MyReader(),MyReadLine();

public class MyBufferedReader {

    private FileReader fr;
    
    private char[] buff = new char[1024];
    
    private int zz = 0;
    
    private int count = 0;
    
    MyBufferedReader(FileReader fr){
        this.fr = fr;
    }
    
    public int MyRead() throws IOException{
    if(count==0){
        count = fr.read(buff);
         zz =0;
    }
    if(count<0)
        return -1;
    
    char ch = buff[zz++];
    
    count--;
    return ch;
    
}

    public String MyReadLine() throws IOException{
        StringBuilder stb = new StringBuilder();
         
        int ch = 0;
        while((ch=MyRead())!=-1){
            
            if(ch=='\r')
                continue;
            if(ch=='\n')
                return stb.toString();
            
            stb.append((char)ch);
            
        }
        if(stb.length()!=0)
            return stb.toString();
        return null;
    }
    public void MyClose() throws IOException{
        fr.close();
    }
}

里面我定义了指针zz  和一个缓冲区计数器count来记录缓冲区内读取数据的变化

当count==0时 就往缓冲区内读入数据 zz为0 从第一个数开始读

小于0时数据读取完毕 返回-1

在MyReadLine()中 创建一个字符串容器StringBuilder 来存储数据党stb==\n时 一行读取完毕其返回值为null;

 

想学小程序和Python私我   QQ:3275724538

posted @ 2017-12-15 10:27  (至尊宝)  阅读(434)  评论(0编辑  收藏  举报