То, что предлагает Рекс Керр в своем комментарии, следующее:
val md = MessageDigest.getInstance("MD5")
val input = new FileInputStream("foo.txt")
val buffer = new Array[ Byte ]( 1024 )
Stream.continually(input.read(buffer))
.takeWhile(_ != -1)
.foreach(md.update(buffer, 0, _))
md.digest
Ключом является Stream.continually
. Он получает выражение, которое постоянно оценивается, создавая бесконечное Stream
оцениваемого выражения. takeWhile
- это перевод из условия while
. foreach
является телом while
-loop.