龙哥网

龙哥网

关于BufferedReader的读取效率问题_java(bufferedreader read方法)
2022-03-01

目录
  • 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();
        }
    }
    
    免责声明
    本站部分资源来源于互联网 如有侵权 请联系站长删除
    龙哥网是优质的互联网科技创业资源_行业项目分享_网络知识引流变现方法的平台为广大网友提供学习互联网相关知识_内容变现的方法。