关于BufferedReader的读取效率问题

 更新时间:2021年12月09日 15:23:25   作者:Lazy_Code  
这篇文章主要介绍了关于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();
    }
}

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

相关文章

  • Java的List集合框架之LinkedList详细解析

    Java的List集合框架之LinkedList详细解析

    这篇文章主要介绍了Java的List集合框架之LinkedList详细解析,LinkedList底层是内部Node类的存储,prev、next、item值,同时最外层还有first、last节点,需要的朋友可以参考下
    2023-11-11
  • 基于Spring5实现登录注册功能

    基于Spring5实现登录注册功能

    这篇文章主要为大家详细介绍了基于Spring5实现登录注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Java骚操作之CountDownLatch代码详解

    Java骚操作之CountDownLatch代码详解

    这篇文章主要介绍了Java骚操作之CountDownLatch代码详解,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 基于Java解决华为机试实现整数与IP地址间的转换 

    基于Java解决华为机试实现整数与IP地址间的转换 

    这篇文章主要介绍了基于Java解决华为机试实现整数与IP地址间的转换,文章举例说明围绕文章主题展开相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • java在linux本地执行shell命令的实现方法

    java在linux本地执行shell命令的实现方法

    本文主要介绍了java在linux本地执行shell命令的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • spring boot 统一JSON格式的接口返回结果的实现

    spring boot 统一JSON格式的接口返回结果的实现

    这篇文章主要介绍了spring boot 统一JSON格式的接口返回结果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Java GZIPOutputStream流压缩文件的操作

    Java GZIPOutputStream流压缩文件的操作

    这篇文章主要介绍了Java GZIPOutputStream流压缩文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 详解Java中自定义注解的使用

    详解Java中自定义注解的使用

    Annontation是Java5开始引入的新特征,中文名称叫注解,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。本文主要介绍了自定义注解的使用,希望对大家有所帮助
    2023-03-03
  • SpringBoot实现Excel文件批量上传导入数据库

    SpringBoot实现Excel文件批量上传导入数据库

    这篇文章主要为大家详细介绍了SpringBoot实现Excel文件批量上传导入数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Mybatis-Plus时间范围查询方式详解

    Mybatis-Plus时间范围查询方式详解

    这篇文章主要介绍了Mybatis-Plus时间范围查询方式详解,通过两种方式结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论