【发布时间】:2016-10-10 20:52:42
【问题描述】:
在从亚马逊下载文件时,尝试找出如何输出 0 - 100% 的干净计数。有很多关于如何上传的例子,但它们似乎并没有直接转化为下载。
目前我正在做以下事情
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
while (!download.isDone()) {
LOGGER.info("Downloaded >> " + download.getProgress().getPercentTransferred());
}
这确实有效,但它多次向控制台发送相同值的垃圾邮件(假设它是线程化的)。
我知道我也可以这样做:
ProgressListener listener = progressEvent -> LOGGER.info("Bytes transfer >> " + progressEvent.getBytesTransferred());
GetObjectRequest s3Request = new GetObjectRequest("swordfish-database", snapshot.getKey());
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
download.addProgressListener(listener);
download.waitForCompletion();
这也有效,但是我失去了使用download.getProgress().getPercentTransferred() 的便利性。这是更合适的方法吗?
最终我想获得一个用于进度条的 int。有什么建议吗?
【问题讨论】:
-
好吧,如果您保留一个单独的线程来更新进度,那么我看不到第一种方法有任何问题 - 您可以添加类似
TimeUnit.SECONDS.sleep(1)的内容来每秒更新进度,而不是循环所有时间。另一方面,在第二种方法中,您只需将getBytesTransferred()除以getBytes()即可获得百分比,这似乎也不太难:-) -
哦,当然!出于某种原因,我的头脑在想睡觉会使实际下载睡眠(因此减慢速度),这就是为什么我一开始没有这样做的原因。我的一半脑袋放屁。如果你写一个,很高兴接受这个作为答案:)