【发布时间】:2012-08-11 05:55:25
【问题描述】:
我正在下载一个文件,但也尝试确定以 KBps 为单位的下载速度。我想出了一个方程式,但它给出了奇怪的结果。
try (BufferedInputStream in = new BufferedInputStream(url.openStream());
FileOutputStream out = new FileOutputStream(file)) {
byte[] buffer = new byte[4096];
int read = 0;
while (true) {
long start = System.nanoTime();
if ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
} else {
break;
}
int speed = (int) ((read * 1000000000.0) / ((System.nanoTime() - start) * 1024.0));
}
}
它给了我 100 到 300,000 之间的任何值。我怎样才能让它给出正确的下载速度?谢谢
【问题讨论】:
-
nanoTime很少接近准确。下载时或下载完成后是否需要报告下载速度? -
@SoboLAN 下载时。除了 nanoTime,我还能使用什么?我认为
currentTimeMillis也行不通。