2

こんにちは私は大規模なデータ収集を扱うための最速のバットではなく高レベルの方法を探しています。私のタスクは、メモリ内の大きなファイルを大量に読み取り、いくつかの統計計算を行う 2 つのタスクで構成されます (このタスクでデータを操作する最も簡単な方法は、ランダム アクセス配列です)。

私の最初のアプローチはjava.io.ByteArrayOutputStream、内部ストレージのサイズを変更できるため、を使用することでした。

def packTo(buf:java.io.ByteArrayOutputStream,f:File) = {
  try {
    val fs = new java.io.FileInputStream(f)
    IOUtils.copy(fs,buf)
  } catch  {
    case e:java.io.FileNotFoundException =>
  }
}

    val buf = new java.io.ByteArrayOutputStream()
    files foreach { f:File  => packTo(buf,f) } 
    println(buf.size())

    for(i <- 0 to buf.size()) {
       for(j <- 0 to buf.size()) {
          for(k <- 0 to buf.size()) {
       //  println("i  " + i + "  " + buf[i] );
                   // Calculate something amathing using buf[i] buf[j] buf[k] 
          }
       }
    }

    println("amazing = " + ???)

しかし、それの単なるコピーByteArrayOutputStreamとして私を手に入れることはできません。byte[]しかし、データのコピーを 2 つ持つことはできません。

4

2 に答える 2

6

scala-ioを試しましたか? それと同じくらい簡単でなければなりませんResource.fromFile(f).byteArray

于 2013-05-24T11:02:55.100 に答える
0

Scala の組み込みライブラリは、これを行うための優れた API を既に提供しています。

io.Source.fromFile("/file/path").mkString.getBytes

ただし、ファイル全体をバイト配列としてメモリにロードすることは、多くの場合良い考えではありません。可能な限り最大のファイルが JVM メモリに適切に収まることを確認してください。

于 2013-05-24T12:42:58.310 に答える