FileReader中的read()方法,可以建立一个字符数组作为缓冲区,为什么说BufferedReader的readLine()方法比read()方法高效?

解决方案 »

  1.   

     肯定时readLine高效,因为这个是一次读取一行,而read是读取一个字符,就相当于你在搬东西,你是一个一个的搬效率高  还是找个书包 一次放10个效率高   很显然是后者
      

  2.   

    我的意思是read()方法可以自定义缓冲区,而这个缓冲区存储数据可以比一行存储数据多,假如说readLine()方法是用书包搬东西,用read()方法时,我可以定义一个集装箱,为什么还是认为readLine更高效
      

  3.   


    因为read每读取一个字符就要访问一次磁盘,这对磁盘的杀伤力是挺大的,而readLine访问一次就读了一行,速度上肯定快,而且对磁盘的访问减少了
      

  4.   

    这个就是计算机的原理了,给LZ写了个InputStream的自定义缓冲类,你看看这个原理class MyBufferedInputStream
    {
    private InputStream in;
           //定义一个计数器记录字符的个数,定义一个数组指针,每读取一个字符,指针移动+1
    private int count = 0,pos = 0;
    private byte[] buf = new byte[1024*8];

    MyBufferedInputStream(InputStream in)
    {
    this.in = in;
    }
    public int myRead() throws IOException
    {
    if(count==0)
    {
    count = in.read(buf);
    if(count<0)
    return -1;
    pos = 0;

    byte b = buf[pos];
    count--;
    pos++;
    return b&255;
    }
    else if(count>0)
    {
    byte b = buf[pos];
    count--;
    pos++;
    return b&255;
    }
    return -1;
    }
    public void myColse() throws IOException
    {
    in.close();
    }
    }
    其实还是调用的read()方法,一个一个读取访问
      

  5.   


    我能请教你下不?
    1、你定义的private byte[] buf = new byte[1024*8];这一句我有点不明白,不就是new byte[8184]么?
    2、如果文本里是“汉字”,你的这个read()就不适用了?我碰到了个问题,就是从文本里读取汉字,然后放入string[length]里面,很纠结 ...