使用缓冲 reader 正确读取 java 中的文件

Reading a file in java using buffered reader correctly

我有以下代码来读取 java 中的文件并打印出行。我以两种方式实现它:

使用流:

List<String> list = new ArrayList<>();
try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
    list = br.lines().collect(Collectors.toList());
    Map<String, Long> totalCount = list.stream() .....

使用循环:

  try (FileReader reader = new FileReader(file);
             final BufferedReader bufferedReader = new BufferedReader(reader)) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {.. }

我被告知这是错误的,使用缓冲 reader 是错误地使用了语言的特性。有没有更好的方法,我想知道使用语言功能的正确方法。

这两个示例做了两件略有不同的事情。关键区别在于第一个解决方案首先将所有行读入内存,然后再迭代这些行。

第二个例子逐行读取文件,这意味着它的内容可以逐行处理

第一种方式:易于编写、阅读和理解。但是:如前所述,它将整个文件读入内存。这对于小文件不是问题,但对于非常大的文件,这会产生各种问题(读取大文件需要时间,对于非常大的文件,您可能 运行 内存不足)。

这两种方法之间的其他区别在某种程度上更“风格”,其中:br.lines() 已经给了你一个 Stream,首先将行收集到一个中没有任何意义列出对象,然后流式传输该对象。