Каково «правильное» написание стандартного цикла чтения в Scala? Под собственно я имею в виду написанное в стиле Scala, а не в стиле Java.
Вот код, который у меня есть на Java:
MessageDigest md = MessageDigest.getInstance( "MD5" );
InputStream input = new FileInputStream( "file" );
byte[] buffer = new byte[1024];
int readLen;
while( ( readLen = input.read( buffer ) ) != -1 )
md.update( buffer, 0, readLen );
return md.digest();
Вот код, который у меня есть в Scala:
val md = MessageDigest.getInstance( hashInfo.algorithm )
val input = new FileInputStream( "file" )
val buffer = new Array[ Byte ]( 1024 )
var readLen = 0
while( readLen != -1 )
{
readLen = input.read( buffer )
if( readLen != -1 )
md.update( buffer, 0, readLen )
}
md.digest
Код Scala правильный и работает, но выглядит очень не по-скала. С одной стороны, это буквальный перевод кода Java, не использующий ни одно из преимуществ Scala. Кроме того, он на самом деле длиннее, чем код Java! Я действительно чувствую, что что-то упустил, но не могу понять, что.
Я довольно новичок в Scala, и поэтому я задаю вопрос, чтобы не попасть в ловушку написания кода в стиле Java в Scala. Меня больше интересует способ решения этой проблемы в Scala, чем какой-либо конкретный вспомогательный метод, который может быть предоставлен Scala API для хеширования файла.
(заранее прошу прощения за свои специальные прилагательные Scala в этом вопросе.)