为什么我得到一个java。仁王.BufferUnderflowException在这个卡拉
-
20-08-2019 - |
题
我是想做一些 脚本在卡拉, 处理一些记录文件:
scala> import io.Source
import io.Source
scala> import java.io.File
import java.io.File
scala> val f = new File(".")
f: java.io.File = .
scala> for (l <- f.listFiles) {
| val src = Source.fromFile(l).getLines
| println( (0 /: src) { (i, line) => i + 1 } )
| }
3658
java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Unknown Source)
at java.nio.HeapCharBuffer.get(Unknown Source)
at scala.io.BufferedSource$$anon$2.next(BufferedSource.scala:86)
at scala.io.BufferedSource$$anon$2.next(BufferedSource.scala:74)
at scala.io.Source$$anon$6.next(Source.scala:307)
at scala.io.Source$$anon$6.next(Source.scala:301)
at scala.Iterator$cla...
我为什么得到这个 java.nio.BufferUnderflowException
?
注意到-我在处理10日志文件,每次大约1MB在的大小
解决方案
我也有兴趣到底这是为什么发生但我猜这要做的事实, Source
是的对象(即一个单独的),它是如何得到 透明地 重置。你可以解决的问题如下:
for (l <- g.listFiles if !l.isDirectory) {
| val src = Source.fromFile(l)
| println( (0 /: src.getLines) { (i, line) => i + 1 } )
| src.reset
| }
重要的一点是 reset
-这应该很可能在一个 try-finally
方块(虽然 isDirectory
试验可能是有用的过)
其他提示
我 BufferUnderflowException
异常的时候我开了一个文件的错误的enconding.它含有非法的字符的(根据错误编码)和该误导性的例外被抛出。
这基本上是重申埃拉扎尔的答案,但是你也会这一例外的,如果你尝试的读的二进制文件的使用 scala.io.Source.fromFile
.
我只是遇到了这个(意试图阅读。jpg与 fromFile
)是由于一个非常愚蠢的错误的东西我写的...
不隶属于 StackOverflow