Действительно ли Files.createDirectory() неблокирует?
Я создал такой метод:
Flux<GetObjectResponse> download(String bucket, List<String> s3FileNames) {
String tmpDirName = UUID.randomUUID().toString();
Path dir = Paths.get(tmpDirName);
if (!Files.exists(dir)) {
try {
Files.createDirectory(dir);
} catch (IOException e) {
e.printStackTrace();
}
}
return Flux.fromIterable(s3FileNames)
.flatMap(filename -> Mono.just(GetObjectRequest.builder().bucket(bucket).key(filename).build()))
.flatMap(getObjectRequest -> Mono.fromFuture(s3AsyncClient.getObject(getObjectRequest, Paths.get(tmpDirName, getObjectRequest.key()))));
}
Позже я обрабатываю этот реактивный поток, но IntelliJ дает мне подсказку, когда я звоню Files.createDirectory(dir)
:
Inappropriate blocking method call less... (Ctrl+1)
Inspection info: Reports thread-blocking method calls found in a code fragment where a thread should not be blocked
Прав ли IntelliJ? Блокируется ли NIO при взаимодействии с файлами?
1 ответ
Решение
Все файловые операции до NIO2 являются синхронными, и вы можете предположить, что операция завершена к моменту возврата метода. Только TCP-сокеты и средство просмотра файлов выполняли асинхронные операции.
NIO2 добавил AsynchronousFileChannel, однако это не относится к каталогам.