任何人都可以解释为什么会这样吗?文件大小最多为2MB。代码执行时间不到2秒。
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
catch(Exception e)
{
}
但是当我将代码更改为:
时String temp = "";
try {
while ((line = br.readLine()) != null) {
temp =temp + line;
}
catch(Exception e)
{
}
我知道这需要相对更多的时间,但需要470秒的大量时间。为什么会出现这种差异?
答案 0 :(得分:6)
temp =temp + line;
字符串的串联是什么。连接需要创建一个新的字符串对象,并且可能需要实习,这需要花费很多时间。相反,考虑在大多数情况下使用StringBuilder或需要同步的StringBuffer。
使用
创建一次StringBuilder sb=new StringBuilder()
并追加:
sb.append(line);
然后,您可以使用sb.toString()
抓取数据。
答案 1 :(得分:1)
在Java中,字符串是不可变的。所以这句话:
temp =temp + line;
为文件中的每一行创建一个新的字符串对象,这会减慢速度。一些更好的替代方案包括StringBuilder和StringBuffer
您可以找到一些基准here来比较这3种串联字符串的速度。