Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非阻塞文件读取_Java_C++_Io_Java Native Interface - Fatal编程技术网

Java 非阻塞文件读取

Java 非阻塞文件读取,java,c++,io,java-native-interface,Java,C++,Io,Java Native Interface,java中是否有非阻塞文件读取API?如果不是,在C++中构建一个并通过JNI调用java应用程序是明智的吗?< /P> < P>不, 不扩展 。 可能是因为并非所有操作系统都支持它 Windows,理论上你可以编写一个Windows特定的C++库并通过JNI调用它,但是要把它与java .NiO 集成起来,还需要大量的工作。 我宁愿让一个工作线程将文件内容复制到另一端,并在管道的另一端执行非阻塞读取。我原来的答案现在是错误的,因为在Java 7中添加了 您仍然无法对文件执行任何操作,但现在有

java中是否有非阻塞文件读取API?如果不是,在C++中构建一个并通过JNI调用java应用程序是明智的吗?< /P> < P>不,<代码> <代码>不扩展<代码> <代码>。 可能是因为并非所有操作系统都支持它

Windows,理论上你可以编写一个Windows特定的C++库并通过JNI调用它,但是要把它与java .NiO

集成起来,还需要大量的工作。
我宁愿让一个工作线程将文件内容复制到另一端,并在管道的另一端执行非阻塞读取。

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

您仍然无法对文件执行任何操作,但现在有两种异步文件读取方法:一种方法接受,另一种方法返回


使用回调方法(并从回调中分派事件)可能比使用专用线程轮询管道更干净。

AsynchronousFileChannel
是正确的答案。然而,它并没有提供一个简单的API。与提供简单静态方法的
java.nio.file.Files
的类似用法相比,使用它非常冗长,例如:
readAllLines
lines
。不幸的是,
文件
方法是同步的

来自的
AsyncFiles
备选方案提供了相应的非阻塞方法,具有3种不同的API:基于回调的、
CompletableFuture
以及反应流。这里是一个反应流的示例:


你想用它做什么?使用阻塞模型有什么错?潜在的IO阻塞会干扰MDB的生命周期。你能扩展一下吗?这会有什么影响?@finnw是的,消息驱动Bean的MDB。异步和非阻塞是不同的。事实上,异步IO操作作为非阻塞IO显然不是。
AsyncFiles
    .lines(path)
    .subscribe(doOnNext(line -> /*... use line from background thread ...*/));