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

图形运行中的输入流关闭

  •  0
  • Synesso  · 技术社区  · 7 年前

    我有一个处理大文件的图形。通过从输入流创建的迭代器访问文件。

    for {
      in <- managed(new FileInputStream(inputFile))
    } {
      // 3rd party lib that creates iterator from input stream
      val iterator = () => EntityIterator.fromPbf(in) 
      Source
        .fromIterator[OSMEntity](iterator)
        .runForeach(println)
    }
    

    (这里我使用的是ARM,但是如果需要的话,我很乐意手动滚动输入流管理)。

    我希望此代码打印迭代器中的每个对象。相反,它会立即结束,因为 in 臂块一关闭,即关闭。因为 runForeach 不堵塞,立即关闭。

    如果我不使用ARM,什么时候应该手动关闭输入流?或者我不需要,因为阿卡会在 EOF 到达了吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   emran    7 年前

    scala-arm 但是请记住 runForeach Future[Done] onComplete .

    val buf = scala.io.Source.fromFile("readme.md")
    Source.fromIterator(() => buf)
      .runForeach(print)
      .onComplete {
        case Success(_) => buf.close()
        case Failure(err) => println(s"error! ${err.getMessage}")
      }
    

    FileIO 也!

    FileIO.fromPath(Paths.get("readme.md"))
      .map(_.utf8String)
      .runForeach(print)
      .onComplete {
        case Success(res) => println("done!")
        case Failure(err) => println(err.getMessage)
      }