这可能是由于Amazon S3 CLI使用多线程并发请求,而Java SDK只是使用单线程请求。可以使用Java SDK中的AmazonS3ClientBuilder和ThreadPoolExecutor创建多个线程并发执行。以下是示例代码:
AmazonS3 client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
for (S3ObjectSummary summary : client.listObjects("my-bucket").getObjectSummaries()) {
Runnable worker = new S3CopyWorker(summary.getKey(), "my-bucket", client);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {}
上述代码中,创建一个AmazonS3ClientBuilder对象用于创建AmazonS3客户端,并使用线程池执行S3CopyWorker工人对象,以将对存储桶中每个对象执行拷贝操作。在代码中调整线程池大小可以进一步优化性能。