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#方法内部是否也一样(我的意思是,某些内容必须正在下载该文件?)。
有没有更好的方法来实现这一目标?