在处理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。