如何在Scala中将文件读取为字节数组
我可以find大量的例子,但他们似乎主要依赖Java库或只读字符/行/等。
我只是想读一些文件,并与scala库获得一个字节数组 – 有人可以帮我吗?
Java 7:
import java.nio.file.{Files, Paths} val byteArray = Files.readAllBytes(Paths.get("/path/to/file"))
我相信这是最简单的方法。 只是在这里利用现有的工具。 NIO.2真是太棒了。
这应该工作(斯卡拉2.8):
val bis = new BufferedInputStream(new FileInputStream(fileName)) val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray
val is = new FileInputStream(fileName) val cnt = is.available val bytes = Array.ofDim[Byte](cnt) is.read(bytes) is.close()
库scala.io.Source有问题,请不要在读取二进制文件时使用它。
错误可以按照这里的指示复制: https : //github.com/liufengyun/scala-bug
在文件data.bin
,它包含hex0xea
,它是二进制的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库不是。
你也可以考虑使用scalax.io :
scalax.io.Resource.fromFile(fileName).byteArray
您可以使用Apache Commons Compress IOUtils
val file = new File("") IOUtils.toByteArray(new FileInputStream(file))