非阻塞文件读取

时间:2011-01-19 20:24:26

标签: java c++ io java-native-interface

java中是否存在非阻塞文件读取API?如果不是,用C ++构建一个并通过JNI从Java应用程序调用它是明智的吗?

2 个答案:

答案 0 :(得分:23)

我的原始答案现在错了,因为在Java 7中添加了AsynchronousFileChannel

您仍然无法select文件,但现在有两种异步文件读取方法:一种采用callbackanother返回Future。< / p>

使用回调方法(并从回调中调度事件)比使用专用线程轮询管道更清晰。

答案 1 :(得分:7)

不,FileChannel不会延长SelectableChannel

可能是因为并非所有操作系统都支持它。

Windows确实如此,理论上你可以编写一个特定于Windows的C ++库并通过JNI调用它,但要将它与java.nio集成在一起需要做很多工作。

我宁愿让工作线程将文件内容复制到pipe,并在管道的另一端进行非阻塞读取。