Библиотека scala.io.Source проблематична, НЕ ИСПОЛЬЗУЙТЕ ЕГО при чтении двоичных файлов.
Ошибка может быть воспроизведена, как указано здесь: https://github.com/liufengyun/scala-bug
В файле data.bin
он содержит шестнадцатеричный 0xea
, который равен 11101010
в двоичном формате и должен быть преобразован в 234
в десятичном формате.
Файл main.scala
содержит два путичтобы прочитать файл:
import scala.io._
import java.io._
object Main {
def main(args: Array[String]) {
val ss = Source.fromFile("data.bin")
println("Scala:" + ss.next.toInt)
ss.close
val bis = new BufferedInputStream(new FileInputStream("data.bin"))
println("Java:" + bis.read)
bis.close
}
}
Когда я запускаю scala main.scala
, программа выводит следующее:
Scala:205
Java:234
Библиотека Java генерирует правильный вывод, а библиотека Scala - нет.