Die Bibliothek scala.io.Source ist problematisch. Verwenden Sie sie NICHT zum Lesen von Binärdateien.
Der Fehler kann wie hier beschrieben reproduziert werden: https://github.com/liufengyun/scala-bug
In der Datei data.bin
enthält es die Hexadezimalzahl 0xea
, die 11101010
binär ist und 234
in Dezimalzahl konvertiert werden sollte .
Die main.scala
Datei enthält zwei Möglichkeiten zum Lesen der Datei:
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
}
}
Wenn ich starte scala main.scala
, werden die Programmausgaben wie folgt ausgeführt:
Scala:205
Java:234
Die Java-Bibliothek generiert die korrekte Ausgabe, die Scala-Bibliothek nicht.