在写入文件的代码中是否会有任何非阻塞内容,只是因为它使用java.nio的优点?
def writeOutputFile(fileText: String, outDir: String, fileName: String) {
import java.nio.file.{Path, Paths, Files}
import java.nio.charset.StandardCharsets
Files.write(Paths.get(outDir + "/" + fileName), fileText.getBytes(StandardCharsets.UTF_8))
}
或者您是否需要使用promise和future来包装此代码,以便在不阻塞的情况下编写文件?如果这样包裹,那会不会产生另一个在.write
期间阻塞的线程吗?
谢谢!
答案 0 :(得分:1)
java.nio凭借自身的优点不提供任何非阻塞优势。标准FileChannel
仍然是阻止API。要访问其非阻止功能,您必须使用AsynchronousFileChannel
。
注意:注意不要将提供java Future
的读/写方法误认为是有用的异步抽象,因为使用Future
时你还是要阻塞被通知完成。如果您有一堆等待的Future
个实例,它只比同步I / O更好。
对于真正的异步I / O API,您应该使用scala Future包装接受CompletionHandler
的读/写方法,以便可以异步通知I / O完成。 (有关示例,请参阅shifter.io)