使用缓冲 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
,首先将行收集到一个中没有任何意义列出对象,然后流式传输该对象。
我有以下代码来读取 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
,首先将行收集到一个中没有任何意义列出对象,然后流式传输该对象。