Как Stream полученный из файла хранит данные в памяти?

String myPath = "c/user/file.txt";
Stream<String> stream = Files.lines(Paths.get(path));

Допустим, мы написали такой код. Из текстового файл получили стринговый стрим. Если б мы ридером считали этот файл построчно в коллекцию (лист, сет и тд), она бы хранилась у нас в оперативной памяти. А что происходит со стримом? Он как и коллекция будет хранить все строки в памяти, либо каждый раз при обращении к элементам стрима - доставать их из файла.

Если вызвать forEach по этому стриму и произвести какие-либо действия - в оперативной памяти будет храниться ВЕСЬ файл или только одна строка в момент работы с ней и выгружаться после перехода к следующей?

Практическая суть такая. Если у нас свободной оперативной памяти N байт, а файл весит 2N байт, то мы не сможем сохранить его в коллекцию. Поэтому хочу понять как работает тут стрим.


Ответы (0 шт):