关于BufferedReader的读取效率问题
程序员文章站
2022-03-07 14:13:42
目录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(); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。