반응형
Scala에서 파일을 바이트 배열로 읽는 방법
많은 예제를 찾을 수 있지만 대부분 Java 라이브러리에 의존하거나 문자 / 줄 / 등을 읽는 것 같습니다.
일부 파일을 읽고 scala 라이브러리가있는 바이트 배열을 얻고 싶습니다. 누군가 도와 줄 수 있습니까?
자바 7 :
import java.nio.file.{Files, Paths}
val byteArray = Files.readAllBytes(Paths.get("/path/to/file"))
이것이 가능한 가장 간단한 방법이라고 생각합니다. 여기에서 기존 도구를 활용하는 것입니다. NIO.2는 훌륭합니다.
이것은 작동합니다 (Scala 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
, 그것은 16 진수 포함 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 라이브러리는 그렇지 않습니다.
scalax.io 사용을 고려할 수도 있습니다 .
scalax.io.Resource.fromFile(fileName).byteArray
Apache Commons Compress를 사용할 수 있습니다. IOUtils
import org.apache.commons.compress.utils.IOUtils
val file = new File("data.bin")
IOUtils.toByteArray(new FileInputStream(file))
참고 URL : https://stackoverflow.com/questions/7598135/how-to-read-a-file-as-a-byte-array-in-scala
반응형
'Development Tip' 카테고리의 다른 글
NSNotificationcenter의 객체 속성을 사용하는 방법 (0) | 2020.10.25 |
---|---|
JavaScript의 다차원 연관 배열 (0) | 2020.10.25 |
NULL 값을 테이블 끝에 정렬 (0) | 2020.10.25 |
gem의 프록시 서버를 어떻게 설정할 수 있습니까? (0) | 2020.10.25 |
내 HTML에서 rootScope 변수 사용 (0) | 2020.10.25 |