gpt4 book ai didi

java - 在 Java 上限制上传速度?

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:32 25 4
gpt4 key购买 nike

我想以编程方式限制 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);
}
}

上面的代码行得通吗?如果没有,是否有更好的方法来做到这一点?是否有描述该理论的教程?

最佳答案

Token Bucket Algorithm是一种限制上传或下载带宽的方法。你应该阅读 this article : 它解释了这个算法的使用。

使用 Guava RateLimiter :

// 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,它会立即被授予,但它是下一个请求将经历额外的节流,从而支付昂贵任务的成本。

关于java - 在 Java 上限制上传速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com