質問

私は/ スクリプトを実行するためにしようとしていましたA>、いくつかのログファイルを処理します。

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を読み取ろうとする)は、このに走った。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top