3
我在處理4MB日誌文件時遇到類似問題this guy。其實我同時處理多個文件,但因爲我不斷收到此異常,我決定只是測試它的單個文件:當在Scala中處理文件時發生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似乎對文件的編碼持不同意見,最終導致這種下溢。不知道可以做些什麼。 – 2009-10-26 11:19:19
是的。根據票據頁面,爲Scala用戶提供的BufferUnderFlow唯一真正的解決方案就是等待Scala 2.8。 – Ekkmanz 2009-10-26 15:34:10