如何限制文件上传的带宽?

时间:2015-12-29 06:32:30

标签: java android azure azure-mobile-services

我正在尝试使用他们的Android移动服务将文件上传到Microsoft Azure服务器。但问题是在上传过程中,单个文件上传会占用所有可用带宽。

有没有办法限制单个上传的带宽?

我尝试了什么?

Azure服务可以以块的形式获取文件。所以我将块大小定义为50kb,每个连接的最大带宽限制为100kb / s

{
  t1=geTimeInMilliseconds();
  uploadChunk();
  t2=geTimeInMilliseconds();
  t3=t2-t1;
  if(t3<500ms){
   sleep(500-t3);
  }
}

我确信这不是完美的做法。对此有任何建议将是一个很大的帮助..

1 个答案:

答案 0 :(得分:1)

从I / O流的原理出发,简单地考虑上传的带宽限制如下。

  1. I / O流速限制的假设为N Byte,然后发送N/M sec数据的成本时间为N Byte
  2. 现在假设发送N/M s数据,则费用时间应为T s。但是,实际成本时间为(N/M - T) sec,因此发送线程应该休眠int BUF_SIZE = 1024; long speed = 12800L; // 100 Kbit/s = 100 * 1024 / 8 Byte/s = 12800 Byte/s File file = new File("<file path>"); OutputStream outs = ...; FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[BUF_SIZE]; long cur = 0L; long startTime = System.currentTimeMillis(); while((n = fin.read(buf)) != -1) { cur += n; out.write(buf); if(cur > speed) { long idleTime = (cur-speed)*1000/speed; Thread.sleep(idleTime); cur = 0; startTime = System.currentTimeMillis(); } } fin.close(); outs.flush(); outs.close(); 以实现限制速度。
  3. 以下是Java中的示例代码作为参考。

    Mariadb