scala读取大文件

时间:2013-05-24 10:57:38

标签: scala large-files bytearrayoutputstream

你好我正在寻找最快的蝙蝠而非高级方式来处理大数据。 我的任务包括在内存中读取大量文件的两个任务,然后进行一些统计计算(在此任务中使用数据的最简单方法是随机访问数组)。

我的第一种方法是使用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份数据。

2 个答案:

答案 0 :(得分:6)

你试过scala-io吗?应该像Resource.fromFile(f).byteArray一样简单。

答案 1 :(得分:0)

Scala的内置库已经提供了一个很好的API来实现这个目标

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

但是,将整个文件作为字节数组加载到内存中通常不是一个好主意。确保最大可能的文件仍然可以正确放入JVM内存。