实时下载速度的计算:

309 篇文章 5 订阅
所谓的实时下载速度也是按秒计算的,直接每秒计算一下当前下载量与上次记录的下载量便可得到从
上一秒到这一秒的下载数据量,这样实时下载速度就得出来了,至于剩余时间,可以将当前下载的数
据量与耗用的秒为单位的时间进行计算,然后通过需要下载的数据大小来预估剩余时间,公式这样:
剩余时间(秒)=须下载数据总大小/(当前耗用时间(秒)/当前下载大小)
然后把剩余时间转换一下格式就可以得到分钟、小时、天等信息了

在VC中我们可以这样弄:
设置定时器,固定时间统计下载的数据量,从而得到下载速度,然后用当前的速度估算未来需要耗费的时间。
定时器:1s
文件大小:Size
已下载的部分:Downloaded
前一秒已下载的部分:Downloaded_old


剩余时间:(Size - DownLoad) / (Downloaded - Downloaded_old)


一般我们做下载器时,下载速度都不会选择平均下载速度,而是选择实时下载速度!


import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class Speed {

	private static int count = 0;
	private static int lastCount = 0;

	private static long lasttime=new Date().getTime();
	
	public static void main(String[] args) throws Exception {

		new Thread(new Runnable() {
			
			@Override
			public void run() {
				try {
					getSpeed001();
				} catch (Exception e) {
					e.printStackTrace();
				}
				
			}
		}).start();
		// 按下载量加1所花费的时间来算
		getSpeed002();

	}
	// 按下载量加1所花费的时间来算
	private static void getSpeed002() throws InterruptedException {
		// 直接每秒计算一下当前下载量与上次记录的下载量便可得到从上一秒到这一秒的下载数据量,这样实时下载速度就得出来了
		while (true) {
			int time=1;
			int key = new Random().nextInt(100);
			//System.out.println(key);
			int mod = key % 7;
			switch (mod) {
			case 0:
				time= 1;
				break;
			case 1:
				time= 1;
				break;
			case 2:
				time= 2;
				break;
			case 3:
				time= 3;
				break;
			case 4:
				time= 4;
				break;
			case 5:
				time= 5;
				break;
			case 6:
				time= 6;
				break;
			default:
				break;
			}
			Thread.sleep(time*1000);
			
			long nowtime=new Date().getTime();
			count++;
			
			long taketime = nowtime - lasttime;
			System.out.println("getSpeed002,speed=" + taketime/1000);
			lasttime=nowtime;

		}

	}

	// 按1s下载量来计算。
	private static void getSpeed001() throws Exception {

		TimerTask timerTask_speed = new TimerTask() {

			@Override
			public void run() {
				int speed = count - lastCount;
				System.out.println("getSpeed001,count=" + count + ",lastCount=" + lastCount
						+ ",speed=" + speed);
				lastCount = count;
			}
		};
		Timer timer_speed = new Timer();
		timer_speed.schedule(timerTask_speed, 0, 1000);// 1s判断一次。计算实时速度,
		// 直接每秒计算一下当前下载量与上次记录的下载量便可得到从上一秒到这一秒的下载数据量,这样实时下载速度就得出来了
		while (true) {
			Thread.sleep(1000);// 每秒下载5
			int key = new Random().nextInt(100);
			//System.out.println(key);
			int mod = key % 7;
			switch (mod) {
			case 0:
				count += 0;
				break;
			case 1:
				count += 1;
				break;
			case 2:
				count += 2;
				break;
			case 3:
				count += 3;
				break;
			case 4:
				count += 4;
				break;
			case 5:
				count += 5;
				break;
			case 6:
				count += key;
				break;
			default:
				break;
			}

		}

	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值