非阻塞文件读取
java中是否有非阻塞文件读取API? 如果不是,用C ++构建一个并通过JNI从Java应用程序调用它是否明智?
不, FileChannel
不会扩展SelectableChannel
。
可能是因为并非所有操作系统都支持它。
Windows确实如此,从理论上讲,你可以编写一个特定于Windows的C ++库并通过JNI调用它,但是将它与java.nio
集成是很多工作。
我宁愿让工作线程将文件内容复制到管道 ,并在管道的另一端进行非阻塞读取。
我的原始答案现在是错误的,因为在Java 7中添加了AsynchronousFileChannel
。
您仍然无法选择文件,但现在有两种异步文件读取方法:一种采用回调 , 另一种采用Future
。
使用回调方法(并从回调中调度事件)比使用专用线程轮询管道更清晰。