tha*_*att 5 file-io scala bufferunderflowexception
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...
Run Code Online (Sandbox Code Playgroud)
为什么我这样做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
| }
Run Code Online (Sandbox Code Playgroud)
重要的一点是reset- 它可能应该在一个try-finally块中(尽管isDirectory测试可能也很有用)
| 归档时间: |
|
| 查看次数: |
13628 次 |
| 最近记录: |