3 回答
TA贡献1835条经验 获得超7个赞
我想你误会了。这些操作实际上是同步的,所以你很高兴来到这里。Files.write
以 ajava.io.OutputStream
为例。
Some NamecreateDirectory
解决了Linux的可能实现。
在 Windows 上,createDirectory
使用CreateDirectory WinAPI 函数。
WindowsNativeDispatcher.CreateDirectory(var3.getPathForWin32Calls(), var4.address() /* Security descriptor */);
Buffers
,Channels
并且Selectors
是非阻塞的。
TA贡献1777条经验 获得超10个赞
我已经想通了。问题实际上不在于 Files 类的非阻塞性质。我混合了 File 对象和 Path 对象,并在它们之间进行转换,java 似乎对目录和文件是什么感到困惑,而是创建了被调用的文件,blah/foo
而blah/bar
不是foo
在名为blah
. 我刚刚切换到传递 Path 对象而不是 File 对象来表示我的文件和目录,并且一切正常。
TA贡献1795条经验 获得超7个赞
是否有“正确”的方法来确定 Files.createDirectories(path) 何时完成
一回来就完成了。这很可能是一个简单的包装mkdir(2)
此外,非阻塞语义对常规文件没有影响(至少在 Linux 中,至少现在)http://man7.org/linux/man-pages/man2/open.2.html
O_NONBLOCK 或 O_NDELAY
[...]
请注意,此标志对常规文件和块设备无效;也就是说,无论是否设置了 O_NONBLOCK,当需要设备活动时,I/O 操作都会(短暂地)阻塞。
添加回答
举报