令牌桶算法是一种限制上传或下载带宽的方法。您应该阅读本文:它解释了此算法的用法。
使用番石榴RateLimiter:
// rate = 512 permits per second or 512 bytes per second in this casefinal 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,它将立即被授予,但是下一个请求将受到额外的限制,从而支付了昂贵任务的成本。



