gpt4 book ai didi

scala - 在Scala中处理文件时出现java.nio.BufferUnderflowException

转载 作者:行者123 更新时间:2023-12-02 04:18:04 24 4
gpt4 key购买 nike

处理 4MB 日志文件时遇到了与this guy类似的问题。实际上,我正在同时处理多个文件,但是由于我不断收到此异常,因此我决定仅对单个文件进行测试:

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

应该工作正常,没有下溢。另请参阅 this question

关于scala - 在Scala中处理文件时出现java.nio.BufferUnderflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com