Java读取长文本文件非常慢

loz*_*zga 10 java file-io file-read bufferedreader

我有一个文本文件(使用XStream创建的XML),长度为63000行(3.5 MB).我正在尝试使用Buffered reader阅读它:

                BufferedReader br = new BufferedReader(new FileReader(file));
                try {
                    String s = "";
                    String tempString;
                    int i = 0;
                    while ((tempString = br.readLine()) != null) {
                        s = s.concat(tempString);
//                        s=s+tempString;
                        i = i + 1;
                        if (i % 1000 == 0) {
                            System.out.println(Integer.toString(i));
                        }
                    }
                    br.close();
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到我尝试测量阅读速度.它非常低.在10000行之后读取1000行需要几秒钟.我显然做错了什么,但无法理解什么.在此先感谢您的帮助.

Tom*_*rae 4

@PaulGrime 是对的。每次循环读取一行时,您都会复制该字符串。一旦字符串变大(比如 10,000 行),它就会做大量的工作来进行复制。

尝试这个:

StringBuilder sb = new StringBuilder();
while (...reading lines..){ 
   ....
   sb.append(tempString);  //should add newline
   ...
}

s = sb.toString();
Run Code Online (Sandbox Code Playgroud)

注意:阅读下面 Paul 的回答,了解为什么剥离换行符会成为读取文件的糟糕方法。另外,正如问题评论中提到的,XStream 提供了一种读取文件的方法,即使没有,IOUtils.toString(reader) 将是一种更安全的读取文件的方法。