我正在尝试使用他们的Android移动服务将文件上传到Microsoft Azure服务器。但问题是在上传过程中,单个文件上传会占用所有可用带宽。
有没有办法限制单个上传的带宽?
我尝试了什么?
Azure服务可以以块的形式获取文件。所以我将块大小定义为50kb,每个连接的最大带宽限制为100kb / s
{
t1=geTimeInMilliseconds();
uploadChunk();
t2=geTimeInMilliseconds();
t3=t2-t1;
if(t3<500ms){
sleep(500-t3);
}
}
我确信这不是完美的做法。对此有任何建议将是一个很大的帮助..
答案 0 :(得分:1)
从I / O流的原理出发,简单地考虑上传的带宽限制如下。
N Byte
,然后发送N/M sec
数据的成本时间为N Byte
。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();
以实现限制速度。以下是Java中的示例代码作为参考。
Mariadb