Бібліотека 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 - ні.