Pourquoi dois-je obtenir un java.nio.BufferUnderflowException en Scala
J'ai essayé de faire quelques script en Scala, pour traiter certains fichiers journaux:
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...
Pourquoi ai-je cette java.nio.BufferUnderflowException
?
- Je suis de traitement de 10 fichiers journaux, chacune d'environ 1 MO en taille
OriginalL'auteur thatismatt | 2009-06-26
Vous devez vous connecter pour publier un commentaire.
Je serais aussi intéressé de savoir pourquoi ce qui se passe, mais je suppose que c'est à voir avec le fait que
Source
est un objet (c'est à dire un singleton) et comment elle est obtient de manière transparente de réinitialisation. Vous pouvez résoudre le problème comme suit:L'important est la
reset
- ce qui devrait probablement être dans unetry-finally
bloc (bien que leisDirectory
test est probablement utile aussi)OriginalL'auteur oxbow_lakes
J'ai eu
BufferUnderflowException
exception lorsque j'ouvre un fichier avec le mauvais enconding. Il contenait des caractères illégaux (selon le mauvais encodage) et ce trompeuse exception a été levée.OriginalL'auteur Elazar Leibovich
C'est essentiellement une reformulation de Elazar réponse, mais vous obtiendrez également cette exception si vous essayez de lire un fichier binaire en utilisant
scala.io.Source.fromFile
.Je viens de tomber sur ce (accidentellement en essayant de lire un .jpg avec
fromFile
) en raison d'une très stupide bug dans quelque chose que j'ai écrit...OriginalL'auteur overthink