java从文件中读取特定行的速度非常慢
我创建了一个方法,可以根据文件的行号从文件中读取特定的行。它适用于大多数文件,但当我试图读取一个包含大量非常长的行的文件时,它需要很长时间,尤其是当它在文件中的位置越来越低时。我也做了一些调试,看起来也占用了很多内存,但我不确定这是否是可以改进的。我知道还有一些其他问题是关于如何从文件中读取某些行的,但这个问题主要集中在性能方面
public static final synchronized List<String> readLines(final File file, final Integer start, final Integer end) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
List<String> lines = new ArrayList<>();
try {
String line = bufferedReader.readLine();
Integer currentLine = 1;
while (line != null) {
if ((currentLine >= start) && (currentLine <= end)) {
lines.add(line + "\n");
}
currentLine++;
if (currentLine > end) {
return lines;
}
line = bufferedReader.readLine();
}
} finally {
bufferedReader.close();
}
return lines;
}
如何优化此方法以使其比光速更快
# 1 楼答案
我意识到我以前做的事情天生就很慢,占用了太多的内存
通过将所有行添加到内存中,然后处理
List
中的所有行,它不仅花费了两倍的时间,而且还无缘无故地创建了String
变量我现在正在使用Java 8
Stream
并在阅读时进行处理,这是我迄今为止使用的最快的方法