关于BufferedReader的读取效率问题

网友投稿 785 2022-11-16

关于BufferedReader的读取效率问题

关于BufferedReader的读取效率问题

目录BufferedReader的读取效率1. 一般情况2. 采用read+CharBufferOJ系统里用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) {

HBloabVRx bos.flip();

builder.append(bos.toString());

}

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

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

补充:

后续实验中发现,其实并不是read方法和CharBuffer高效。其实是String对象频繁的创建导致效率低下,使http://用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));

HBloabVRx String str=null;

try {

int a= Integer.parseInt(buf.readLine());

double b=Double.parseDouble(buf.readLine());

} catch (IOException e) {

e.printStackTrace();

}

System.out.println();

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从台下到台上,我成为 GDE(谷歌开发者专家) 的经验分享
下一篇:强大、好用、适合程序员/软件开发者的专业编辑器/笔记软件综合评测和全面推荐
相关文章

 发表评论

暂时没有评论,来抢沙发吧~