在scala中反序列化Int向量的最快方法

时间:2014-06-17 01:33:55

标签: scala

我有一个Vector,它用作基于元素索引的查找表。它真的很庞大(3000多万元素)。我想将它存储在文件系统上,每次启动我的应用程序时,都要将其读入某个对象。 我目前在这里看到三个选项:

  1. 只需写一个完整的文件
  2. 使用二进制格式
  3. 使用Vector中的对象序列化
  4. 这里最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

写一个完整的文件,然后在内存映射文件周围使用包装器来读取它。

class MMappedIntVector (mmap: java.nio.MappedByteBuffer) {
  def getInt (idx: Int): Int = mmap.getInt (idx * 4)
}
object MMappedIntVector {
  def load (path: String): MMappedIntVector = {
    // mmap here
  }
}

当然,缺点是文件格式最终会被锁定到CPU的字节序。