복붙노트

[SCALA] 스칼라의 byte 배열로 파일을 읽는 방법

SCALA

스칼라의 byte 배열로 파일을 읽는 방법

나는 예제의 톤을 찾을 수 있지만 하나가 등 자바 라이브러리 나 방금 읽은 문자 / 선 /에 주로 의존에 그들은 보인다.

난 그냥 일부 파일에 읽기 및 스칼라 라이브러리와 바이트 배열을 얻으려면 - 그와 깡통 누군가의 도움이 나를?

해결법

  1. ==============================

    1.자바 7 :

    자바 7 :

    import java.nio.file.{Files, Paths}
    
    val byteArray = Files.readAllBytes(Paths.get("/path/to/file"))
    

    나는 이것이 가능한 가장 간단한 방법입니다 생각합니다. 그냥 여기에 기존 도구를 활용. NIO.2는 훌륭합니다.

  2. ==============================

    2.이것은 (스칼라 2.8) 작동합니다 :

    이것은 (스칼라 2.8) 작동합니다 :

    val bis = new BufferedInputStream(new FileInputStream(fileName))
    val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray
    
  3. ==============================

    3.

    val is = new FileInputStream(fileName)
    val cnt = is.available
    val bytes = Array.ofDim[Byte](cnt)
    is.read(bytes)
    is.close()
    
  4. ==============================

    4.도서관 scala.io.Source 바이너리 파일 읽기에 IT를 사용하지 마십시오, 문제가있다.

    도서관 scala.io.Source 바이너리 파일 읽기에 IT를 사용하지 마십시오, 문제가있다.

    여기에 설명 된대로 오류를 재현 할 수 있습니다 : https://github.com/liufengyun/scala-bug

    파일 data.bin에서는 이진 11,101,010 인 진수로 234로 변환해야 진수 0xea를 포함한다.

    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
      }
    }
    

    내가 스칼라 main.scala을 실행하면 프로그램의 출력은 다음과 같습니다 :

    Scala:205
    Java:234
    

    자바 라이브러리는 스칼라 라이브러리 동안하지, 올바른 출력을 생성합니다.

  5. ==============================

    5.또한 scalax.io 사용을 고려할 수 :

    또한 scalax.io 사용을 고려할 수 :

    scalax.io.Resource.fromFile(fileName).byteArray
    
  6. ==============================

    6.당신은 아파치 코 몬즈 압축 IOUtils을 사용할 수 있습니다

    당신은 아파치 코 몬즈 압축 IOUtils을 사용할 수 있습니다

    import org.apache.commons.compress.utils.IOUtils
    
    val file = new File("data.bin")
    IOUtils.toByteArray(new FileInputStream(file))
    
  7. from https://stackoverflow.com/questions/7598135/how-to-read-a-file-as-a-byte-array-in-scala by cc-by-sa and MIT license