このようなファイルを消費するために使用しないでくださいscala.collection.immutable.Stream
。その理由は、メモ化を実行するためです。つまり、怠惰ですが、ストリーム全体をメモリにバッファリング (メモ化) したままにします!
これは、「ファイルのストリーム処理」について考えるときに絶対に望んでいることではありません。Scala の Stream がこのように機能する理由は、機能的な設定では完全に理にかなっているためです。たとえば、これにより、フィボナッチ数の計算を何度も簡単に回避できます。詳細については、ScalaDocを参照してください。
Akka Streams は、Reactive Streams の実装を提供し、FileIO
ここで使用できるクラスを提供します (必要な場合にのみ適切にバックプレッシャーをかけてファイルからデータを引き出し、残りのストリームがそれを消費する準備ができています)。
import java.io._
import akka.actor.ActorSystem
import akka.stream.scaladsl.{ Sink, Source }
object ExampleApp extends App {
implicit val sys = ActorSystem()
implicit val mat = FlowMaterializer()
FileIO.fromPath(Paths.get("/example/file.txt"))
.map(c ⇒ { print(c); c })
.runWith(Sink.onComplete(_ ⇒ { f.close(); sys.shutdown() } ))
}
Akka Streams での IO の
操作に関するその他のドキュメントを次に示します。これは執筆時点での Akka のバージョンであることに注意してください。
お役に立てれば!