Java中的异步File.copy

时间:2017-11-09 18:33:34

标签: java nio completable-future

Java中有没有办法以异步方式将一个文件复制到另一个文件中?在C#中类似于Stream.CopyToAsync的东西就是我想要找到的东西。

我想要实现的是从互联网上下载一系列~40个文件,这是我为每个文件提供的最好的文件:

CompletableFuture.allOf(myFiles.stream()
        .map(file -> CompletableFuture.supplyAsync(() -> syncDownloadFile(file)))
        .toArray(CompletableFuture[]::class))
    .then(ignored -> doSomethingAfterAllDownloadsAreComplete());

syncDownloadFile的位置:

private void syncDownloadFile(MyFile file) {
    try (InputStream is = file.mySourceUrl.openStream()) {
        long actualSize = Files.copy(is, file.myDestinationNIOPath);
        // size validation here
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

但这意味着我在任务执行者内部有一些阻塞调用,我想避免这种情况,所以我不能同时阻止太多执行者。

我不确定C#方法内部是否也一样(我的意思是,某些内容必须正在下载该文件?)。

有没有更好的方法来实现这一目标?

0 个答案:

没有答案