我想编写一个同时写入多个文件的程序; 认为通过使用非阻塞模式可以使用一个线程.但FileChannel不支持非阻塞模式.有人知道为什么吗?
Ste*_*n C 14
UNIX不支持非阻塞I/O的文件,请参阅非阻塞I/O与常规文件.由于Java应该(至少尝试)在所有平台上提供相同的行为,因此FileChannel不会实现SelectableChannel.
但是,Java 7将包含一个AsynchronousFileChannel支持异步文件I/O 的新类,这是一种与非阻塞I/O不同的机制.其中一个实现select()受益于Windows上的非阻塞I/O API(请参阅Windows中的异步I/O).
在此期间,您可以使用多个线程来实现相同的效果.但这已经实现,FileChannel可在所有操作系统中移植.
通常,只有套接字和管道真正支持通过SelectableChannel机制的非阻塞I/O.
@Trying评论如此:
"AsynchronousFileChannel支持异步I/O而不是非阻塞."
在我看来,异步I/O(使用例如AsynchronousFileChannel或a select())是一种非阻塞I/O.
FileChannel在通道上执行调用的线程.SelectableChannel以避免以后阻止.(当然,使用a的I/O AsynchronousFileChannel也可以是异步的......取决于你如何使用API.)
相比之下,如果您读取a select()并且当前没有可用的数据,则线程会阻塞...(通常)直到数据可用.
| 归档时间: |
|
| 查看次数: |
5674 次 |
| 最近记录: |