日期:2014-05-18  浏览次数:20700 次

=========关于JAVA输入输出流,BufferedReader.readLine()方法效率的问题=========
感觉readLine()是不是效率有点低?
当我读入数据的时候,如果这个数据中间没有换行,
那不就等于整个文件就只有1行?
我测试了下,读入一个网页的源代码,结果发现
读入这个网页的时候,耗费3秒多,
而把这些数据读出来的时候,用了40多S。
慢的厉害。
有没有替代的方法?只能这样一行一行的读入?

示例:

BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(u.openStream()));
StringBuffer   cb   =   new   StringBuffer();
String   tempCode   =   " ";
long   t2   =   System.currentTimeMillis();
System.out.println( "读取网页内容耗时: "+String.valueOf(t2-t1));
//   把buffer内的值读取出来,保存到code中
while   ((tempCode   =   in.readLine())   !=   null)   {
cb.append(tempCode   +   '\n ');
System.out.println(a);
}
in.close();
long   t3   =   System.currentTimeMillis();
System.out.println( "保存代码用时: "+String.valueOf(t3-t2));

------解决方案--------------------
System.out.println( "读取网页内容耗时: "+String.valueOf(t2-t1));

你的理解是有错的,这里u.openStream()只是打开链接,并非已经读出网页内容
------解决方案--------------------
原理:不用bufferreader,自己写读入的代码,但是这样可能会消耗更多的memery

InputStream in = new InputStreamReader(u.openStream());
StringBuffer cb = new StringBuffer();
byte[] bs = new byte[1024 * 16];//如果内存不是问题,可以根据文件大小,继续增加这个buffer的大小
long t2 = System.currentTimeMillis();
while(true) {
int count = in.read(bs);
if(count == -1) {
break;
} else {
cb.append(new String(bs, 0, count));
}
}
in.close();
long t3 = System.currentTimeMillis();
System.out.println( "保存代码用时: "+String.valueOf(t3-t2));