欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于BufferedReader的读取效率问题

程序员文章站 2022-06-17 16:02:45
目录bufferedreader的读取效率1. 一般情况2. 采用read+charbufferoj系统里用bufferedreader提高效率bufferedreader的读取效率1. 一般情况正常...

bufferedreader的读取效率

1. 一般情况

正常采用readline读取,一行行读取。

readline要注意阻塞的情况,当一行没有"/r"、"/n"、"/r/n"就会阻塞在那。

            inputstreamreader isr = new inputstreamreader(connection.getinputstream(), "utf-8");
            in = new bufferedreader(isr);
            string line; 
            while ((line = in.readline()) != null) {
                result += line;
            }

2. 采用read+charbuffer

            inputstream = connection.getinputstream();
            isr = new inputstreamreader(inputstream, "utf-8");
            in = new bufferedreader(isr);
            charbuffer bos = charbuffer.allocate(20480);
            stringbuilder builder = new stringbuilder();
            while (in.read(bos) != -1) {
                bos.flip();
                builder.append(bos.tostring());
            }

注:bos.flip()作用是将指针指向缓冲区的开头

经过一千条数据的读取,发现采用read+charbuffer的效率要比readline来的高效的多!!!!

补充:

后续实验中发现,其实并不是read方法和charbuffer高效。其实是string对象频繁的创建导致效率低下,使用charbuffer和stringbuilder解决了这一问题。

oj系统里用bufferedreader提高效率

在oj系统中做编程题时,如果从system.in读入的数据非常大的时候,使用scanner非常影响效率,可能导致最终代码超时,所以最好改用bufferedreader来读取字符数据。

例如:

import java.io.bufferedreader; 
import java.io.ioexception; 
import java.io.inputstreamreader;  
public class main 
{ 
    public static  void main(string[]args) 
    {
        bufferedreader buf=null;
        buf=new bufferedreader(new inputstreamreader(system.in));
        string str=null; 
        try { 
            int a= integer.parseint(buf.readline()); 
            
            double b=double.parsedouble(buf.readline());
        } catch (ioexception e) {
            e.printstacktrace();
        }
        system.out.println();
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。