У меня есть график, который обрабатывает большой файл. Доступ к файлу осуществляется через итератор, созданный из входного потока.
for {
in <- managed(new FileInputStream(inputFile))
} {
// 3rd party lib that creates iterator from input stream
val iterator = () => EntityIterator.fromPbf(in)
Source
.fromIterator[OSMEntity](iterator)
.runForeach(println)
}
(Здесь я использую ARM, но я рад, что мне нужно вручную управлять потоком ввода).
Я ожидаю, что этот код напечатает каждый объект в итераторе. Вместо этого он сразу заканчивается, потому что in
закрывается, как только закрывается блок ARM. Поскольку runForeach
не блокируется, он немедленно закрывается.
Если я не использую ARM, когда мне нужно вручную закрывать поток ввода? Или мне не нужно, потому что Акка сделает это, когда будет достигнут EOF