4MB 로그 파일을 처리하는 중 비슷한 문제가 발생했습니다. this guy이 발생합니다. 사실은 내가 동시에 여러 파일을 처리하고있어하지만 난이 예외가 계속 있기 때문에, 난 그냥 하나의 파일을 테스트하기로 결정 :스칼라에서 파일을 처리 할 때 java.nio.BufferUnderflowException이 발생했습니다
val temp = Source.fromFile("./datasource/input.txt")
val dummy = new PrintWriter("test.txt")
var itr = 0
println("Default Buffer size: " + Source.DefaultBufSize)
try {
for(chr <- temp) {
dummy.print(chr.toChar)
itr += 1
if(itr == 75703) println("Passed line 85")
if(itr % 256 == 0){ print("..." + itr); temp.reset; System.gc; }
if(itr == 75703) println("Passed line 87")
if(itr % 2048 == 0) println("")
if(itr == 75703) println("Passed line 89")
}
} finally {
println("\nFalied at itr = " + itr)
}
내가 항상 얻을하는 동안, ITR은 75703을 = 그것을 것 실패 내 출력 파일은 항상 64KB (정확한 65536 바이트)입니다. temp.reset 또는 System.gc를 어디에 두어도 모든 실험이 동일하게 끝납니다.
문제가 일부 메모리 할당에 의존하는 것처럼 보이지만이 문제에 대한 유용한 정보를 찾을 수 없습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
귀하의 모든 크게 감사합니다 도움
편집 : 사실 내가 바이너리 파일로 처리하려는, 그래서이 기술은 좋은 해결책이 아니다, 많은 사람들이 대신 BufferedInputStream을를 사용하는 저를 추천했다. 이 파일을 통해 반복 완료되기 전에
검색 중 http://lampsvn.epfl.ch/trac/scala/ticket/1883이 발견되었습니다. 또한 그것의 사본이 있습니다. 기본적으로 Java와 Scala는 파일에 대한 인코딩에 동의하지 않습니다. 이러한 인코딩은 이러한 언더 플로우로 끝납니다. 그것에 대해 무엇을 할 수 있는지 잘 모릅니다. –
예. 티켓 페이지에 따르면 스칼라 사용자를위한 BufferUnderFlow에 대한 유일한 해결책은 스칼라 2.8을 기다리는 것입니다. – Ekkmanz