jak*_*sky 7 scala reactive-programming akka
我正在使用scala 2.10,我想知道是否有一些包在处理文件时有异步IO?
我做了一些搜索这个主题,但大多数发现的例子如下
val file = new File(canonicalFilename)
val bw = new BufferedWriter(new FileWriter(file))
bw.write(text)
bw.close()
Run Code Online (Sandbox Code Playgroud)
什么本质上基本上java.io包与阻止IO操作 - 写,读等.我也发现scala-io项目有这个意图,但似乎该项目是死去的最后活动2012年.
这种情况下的最佳做法是什么?有没有任何scala包或常见的方法是将java.io代码包装到Futures和Observables?
我的用例是来自Akka actor需要操作本地或远程文件系统上的文件.需要避免阻塞.还是有更好的选择吗?
为了澄清这一点而深受欢迎
Scala没有为异步文件IO提供显式API,但普通的Java API在这些情况下使用是正确的(这实际上是一件好事,我们可以使用所有这些不错的API而无需任何包装!).您应该考虑使用java.nio.channels.AsynchronousFileChannel,它可以从JDK7开始使用,并使用底层系统异步调用文件IO.
Akka IO虽然没有在其核心提供文件IO,但它有一个由Dario Rexin开发的模块,它允许以非常简单的方式使用AsynchronousFileChannel和Akka IO.看看这个库来使用它:https://github.com/drexin/akka-io-file
在不久的将来, Akka将在其akka-streams模块中提供File IO .它可能作为一个外部库有一段时间,但我们还不确定在哪里放置它,因为它将要求用户至少有7个JDK,而Akka目前大多数支持JDK6.话虽如此,基于流的异步反压文件IO即将推出:-)