有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我意识到我以前做的事情天生就很慢,占用了太多的内存

    通过将所有行添加到内存中,然后处理List中的所有行,它不仅花费了两倍的时间,而且还无缘无故地创建了String变量

    我现在正在使用Java 8Stream并在阅读时进行处理,这是我迄今为止使用的最快的方法

    Path path = Paths.get(file.getAbsolutePath());
    Stream<String> stream = Files.lines(path, StandardCharsets.UTF_8);
            for (String line : (Iterable<String>) stream::iterator) {
            //do stuff
            }   
    }