Files.lines是否将所有行读入内存?

时间:2018-03-21 01:06:15

标签: java file

doc中说

  

将文件中的所有行都读为Stream

这是否必要意味着它正在加载整个文件?例如:

try (Stream<String> stream = Files.lines(Paths.get("myfilename.txt"))) {
        stream.forEach(x -> {

如果myfilename 100GB Files.lines会加载整个 100GB 吗?

3 个答案:

答案 0 :(得分:3)

不,它不会将整个文件加载到内存中。它在内部使用具有默认缓冲区大小的BufferedReader,重复调用readLine()

答案 1 :(得分:3)

嗯,您提供的链接已经说明了这一点:

  

与readAllLines不同,此方法不会将所有行读入List,而是在使用流时延迟填充。

因此,每次调用for-each块时,都会读取一个新行。

答案 2 :(得分:0)

自1.8以来添加了一个新的方法lines(),它允许BufferedReader以Stream的形式返回内容。这个方法不会将所有行读入List,而是在流消耗时延迟填充。当你调用for-each时,然后重新加载一个新行。希望可以帮到你!