目录
  • bufferedreader的读取效率
    • 1. 一般情况
    • 2. 采用read+charbuffer
  • oj系统里用bufferedreader提高效率

    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();
        }
    }
    

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