안녕하세요 저는 큰 데이터 수집 작업을 위해 가장 빠른 방법을 찾고 있습니다. 내 작업은 메모리에있는 큰 파일을 두 번 읽은 다음 몇 가지 통계 계산을 수행합니다 (이 작업의 데이터로 작업하는 가장 쉬운 방법은 무작위 액세스 배열입니다).스칼라 큰 파일 읽기
내 첫 번째 방법은 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 개의 데이터 사본을 가질 수 없다.
입니다. scala-io는 매우 합리적인 해결책으로 보이지만 어떻게 효율적 concat 배열 [] 할 수 있습니다. 여기있을 수 있습니다 http://jesseeichar.github.io/scala-io-doc/0.4.2/index.html#!/core/add_all_bytes - 확실하지 않습니다 – Oleg
Best Solution @ user500592 –