【发布时间】:2010-10-17 20:55:28
【问题描述】:
我想写一个同时写入多个文件的程序;认为通过使用非阻塞模式可以使用一个线程。但 FileChannel 不支持非阻塞模式。有人知道为什么吗?
【问题讨论】:
我想写一个同时写入多个文件的程序;认为通过使用非阻塞模式可以使用一个线程。但 FileChannel 不支持非阻塞模式。有人知道为什么吗?
【问题讨论】:
UNIX 不支持文件的非阻塞 I/O,请参阅 Non-blocking I/O with regular files。由于 Java 应该(至少尝试)在所有平台上提供相同的行为,FileChannel 没有实现 SelectableChannel。
不过,Java 7 将包含一个新的AsynchronousFileChannel 类,该类支持异步文件 I/O,这是与非阻塞 I/O 不同的机制。
通常只有套接字和管道通过select() 机制真正支持非阻塞 I/O。
【讨论】:
简单地说,大多数操作系统不会将常规文件视为可以阻塞的东西 - 因此它们不允许您将它们显式设置为非阻塞状态。
【讨论】:
read()/write()/open() 和其他调用是阻塞。不清楚你在说什么。