Действительно ли Files.createDirectory () неблокирует? - PullRequest
0 голосов
/ 22 ноября 2018

Я создал такой метод:

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

Is IntelliJправо?NIO блокируется при взаимодействии с файлами?

1 Ответ

0 голосов
/ 22 ноября 2018

Все файловые операции до NIO2 являются синхронными, и вы можете предположить, что операция завершена к моменту возврата метода.Только TCP-сокеты и средство просмотра файлов выполняли асинхронные операции.

NIO2 добавил AsynchronousFileChannel, однако это не относится к каталогам.

...