代码之家  ›  专栏  ›  技术社区  ›  lindelof

在scala中,可以对从类路径读取的资源调用source.reset()吗?

  •  2
  • lindelof  · 技术社区  · 14 年前

    假设我的类路径上有一个JAR文件。在那个jarfile里我有一个文件 afile.txt .

    我需要对该文件进行两次迭代,一次是计算行数,另一次是解析行数。我就是这样做的:

    val source = Source.fromInputStream(/*some magic to get the resource's InputStream*/)
    source.getLines.foreach (/*count the lines*/)
    source.getLines.reset.foreach (/*do something interesting*/)
    

    但这不管用。在调试器中,似乎调用了 reset() 返回空迭代器。当源引用文件系统上的文件而不是类路径上的文件时,上面的代码可以正常工作。

    是我做错了什么,还是这是scala的IO库中的一个bug?

    1 回复  |  直到 14 年前
        1
  •  1
  •   huynhjl bhericher    14 年前

    我想这是一个bug是scala库。我看了一下source.scala 2.8 trunk 并且reset似乎返回了一个新的包装器,它围绕着原始的输入流,在第一次传递之后就不会有任何内容了。我认为它应该抛出一个例外。我想不出一个简单的方法可以重置任意输入流。

    我想你可以打电话 val source2 = Source.fromInputStream 再看一遍 reset 只不过如此。