なぜ私がこのScalaでjava.nio.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
?
NOTE - 私は約1MB各サイズで10個のログファイルを処理していますの
解決
これが起こっているために正確な理由として、
私も興味があると思いますが、私は(つまり、Aシングルトン)とそれを取得する方法をの透過それは、オブジェクトがSource
であるという事実に関係することだと思うだろうem>のリセット。次のように問題を修正することができます:
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
例外が発生しました。これは、不正な文字が含まれています(間違ったエンコーディングに従って)、この誤解を招くような例外がスローされました。
これは、本質的にElazarの答えの言い換えですが、scala.io.Source.fromFile
を使用してバイナリファイルを読み込むしようとした場合、あなたにも、この例外が発生します。
私はちょうど...原因私が書いた何かでは非常に愚かなバグが(偶然fromFile
との.jpgを読み取ろうとする)は、このに走った。
所属していません StackOverflow