【发布时间】:2011-09-10 09:56:34
【问题描述】:
我想以编程方式限制 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);
}
}
上面的代码会起作用吗?如果没有,有没有更好的方法来做到这一点?有没有介绍理论的教程?
【问题讨论】:
-
这可能会减慢上传/下载速度。虽然取决于每次迭代发送多少数据,以及睡眠期的长度,但可能很难准确限制(即连接速度会改变,但不清楚多少)。为了使其更精细,理论上您会希望减少每次迭代发送的数据量(例如从一行到一个字符)以及达到限制时花费的休息时间。这应该会导致更频繁和更精细的调整......因为我没有教程并且没有验证它,所以不发布作为答案。
-
另外:使用 Reader 或逐行读取都不是一个好主意,因为您基本上是将数据从字节(UTF-8 等)解码为字符,只是为了重新编码,采取一些字节,丢弃其他。相反,从 InputStream 读取一定数量的字节,发送这些字节,并避免此处不需要的解码/编码。
标签: java network-programming theory bandwidth-throttling