在doc中说
将文件中的所有行都读为
Stream
。
这是否必要意味着它正在加载整个文件?例如:
try (Stream<String> stream = Files.lines(Paths.get("myfilename.txt"))) {
stream.forEach(x -> {
如果myfilename
100GB ,Files.lines
会加载整个 100GB 吗?
答案 0 :(得分:3)
不,它不会将整个文件加载到内存中。它在内部使用具有默认缓冲区大小的BufferedReader
,重复调用readLine()
。
答案 1 :(得分:3)
嗯,您提供的链接已经说明了这一点:
与readAllLines不同,此方法不会将所有行读入List,而是在使用流时延迟填充。
因此,每次调用for-each
块时,都会读取一个新行。
答案 2 :(得分:0)
自1.8以来添加了一个新的方法lines(),它允许BufferedReader以Stream的形式返回内容。这个方法不会将所有行读入List,而是在流消耗时延迟填充。当你调用for-each时,然后重新加载一个新行。希望可以帮到你!