문제

나는 비슷한 문제가 있습니다 이 남자 처리하는 동안 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을 대신 사용하는 것이 좋습니다.

도움이 되었습니까?

해결책

왜 전화하는거야 resetSource 파일을 통해 반복을 완료하기 전에?

val temp = Source.fromFile("./datasource/input.txt")
try {
  for (line <- tem p.getLines) {
    //whatever
  }
finally temp.reset     

언더 플로가없이 잘 작동해야합니다. 또한보십시오 이 질문

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top