非阻塞文件读取

The*_*olf 8 c++ java io java-native-interface

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

fin*_*nnw 23

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

您仍然无法选择文件,但现在有两种异步文件读取方法:一种采用回调,另一种采用返回Future.

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

  • 虽然异步与非阻塞不同.实际上异步IO操作[使用强制线程池](https://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannelGroup.html),因为非阻塞IO显然不会吨. (5认同)

fin*_*nnw 7

不,FileChannel不延伸SelectableChannel.

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

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

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