Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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_Reactive Programming_Project Reactor - Fatal编程技术网

Java 如何在反应式环境中处理文件访问

Java 如何在反应式环境中处理文件访问,java,reactive-programming,project-reactor,Java,Reactive Programming,Project Reactor,我正在将一些阻塞代码重构为反应性代码(使用Reactor)。我认为java.nio.file.Files类中的大多数方法都是阻塞的 如果我替换以下方法是否正确: public boolean exists() { return Files.exists(path); } 与: public Mono exists(){ 返回Mono.fromSupplier(()->Files.exists(path)); } 我认为这是必要的,尤其是当使用廉价的硬盘时 或者Reactor中是否存在

我正在将一些阻塞代码重构为反应性代码(使用Reactor)。我认为
java.nio.file.Files
类中的大多数方法都是阻塞的

如果我替换以下方法是否正确:

public boolean exists() {
    return Files.exists(path);
}
与:

public Mono exists(){
返回Mono.fromSupplier(()->Files.exists(path));
}
我认为这是必要的,尤其是当使用廉价的硬盘时


或者Reactor中是否存在用于此类文件操作的库?

通常是的,但您的代码忽略了一个重要部分:分配调度程序

是否通过将某个调用包装成
Mono
来修饰它并不重要。重要的是代码在哪个调度程序(线程)上运行。您的代码错过了一个
.subscribeOn(boundedElastic())
调用

Schedulers.boundedElastic()
用于涉及阻塞I/O的工作)

或者,可以通过调用
.publishOn()
来更改运行代码的线程。例如,如果您处理现有的
流量
(而不是简单的
路径
值,您可以使用
.publishOn()
切换线程,使用简单的
映射()
调用阻塞方法。例如:

Mono.just(path).publishOn(Schedulers.boundedElastic()).map(Files::exists)

也实现了这个目标,尽管它更难看。

通常是的,但您的代码忽略了一个重要部分:分配调度程序

是否通过将某个调用包装成
Mono
来修饰它并不重要。重要的是代码在哪个调度程序(线程)上运行。您的代码错过了一个
.subscribeOn(boundedElastic())
调用

Schedulers.boundedElastic()
用于涉及阻塞I/O的工作)

或者,可以通过调用
.publishOn()
来更改运行代码的线程。例如,如果您处理现有的
流量
(而不是简单的
路径
值,您可以使用
.publishOn()
切换线程,使用简单的
映射()
调用阻塞方法。例如:

Mono.just(path).publishOn(Schedulers.boundedElastic()).map(Files::exists)

也达到了目标,但更丑陋。

这似乎是我见过的一般方法。这似乎是我见过的一般方法。