我想以编程方式限制 Java 中的上传或下载操作。我假设我需要做的就是检查上传速度并插入Thread.sleep()
因此像这样:
while (file.hasMoreLines()) {
String line = file.readLine();
for (int i = 0; i < line.length(); i+=128) {
outputStream.writeBytes(line.substr(i, i+128).getBytes());
if (isHittingLimit())
Thread.sleep(500);
}
}
上面的代码可以工作吗?如果没有,有更好的方法吗?有描述该理论的教程吗?
令牌桶算法是一种限制上传或下载带宽的方法。
你应该阅读本文:它解释了该算法的使用。
Using 番石榴速率限制器 :
// rate = 512 permits per second or 512 bytes per second in this case
final RateLimiter rateLimiter = RateLimiter.create(512.0);
while (file.hasMoreLines()) {
String line = file.readLine();
for (int i = 0; i < line.length(); i+=128) {
byte[] bytes = line.substr(i, i+128).getBytes();
rateLimiter.acquire(bytes.length);
outputStream.writeBytes(bytes);
}
}
正如 Guava 文档中所解释的:需要注意的是,请求的许可数量永远不会影响请求本身的限制(调用 acquire(1) 和调用 acquire(1000) 将导致完全相同的限制,如果有的话),但它会影响下一个请求的限制。也就是说,如果一个昂贵的任务到达一个空闲的 RateLimiter,它将立即被授予,但下一个请求将经历额外的限制,从而支付昂贵任务的成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)