스칼라에서 파일을 처리 할 때 java.nio.bufferunderflowexception
-
06-07-2019 - |
문제
나는 비슷한 문제가 있습니다 이 남자 처리하는 동안 4MB 로그 파일. 실제로 여러 파일을 동시에 처리하고 있지만이 예외를 계속 받기 때문에 단일 파일을 테스트하기로 결정합니다.
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을 대신 사용하는 것이 좋습니다.
해결책
왜 전화하는거야 reset
에 Source
파일을 통해 반복을 완료하기 전에?
val temp = Source.fromFile("./datasource/input.txt")
try {
for (line <- tem p.getLines) {
//whatever
}
finally temp.reset
언더 플로가없이 잘 작동해야합니다. 또한보십시오 이 질문
제휴하지 않습니다 StackOverflow