我使用AndroidHttpClient
从互联网下载视频。有一些方法可以提高下载速度,但我想知道如何使用AndroidHttpClient
或HttpURLConnection
来降低下载速度?是否有任何接口或配置或某些解决方案?
的 的 ** * ** * ** * 的** * ** * * 更新的 * ** * ** * ** * ** * ** * * < / p>
做了一些测试,发现正如Matthew Franglen所说,Thread.sleep(value)
可以是一个解决方案。主要的魔力是确定要睡眠的线程的value
。测试结果如下
no thread sleep
11-06 20:05:14.510: D/DownloadThread(6197): Current speed = 1793978
sleep 0.001s
11-06 20:02:28.433: D/DownloadThread(5290): Current speed = 339670
sleep 0.062
11-06 20:00:25.382: D/DownloadThread(4410): Current speed = 65036
sleep 0.125s
11-06 19:58:56.197: D/DownloadThread(3401): Current speed = 33383
sleep 0.25s
11-06 19:57:21.165: D/DownloadThread(2396): Current speed = 15877
sleep 0.5s
11-06 19:55:16.462: D/DownloadThread(1253): Current speed = 8061
sleep 1s
11-06 19:53:18.917: D/DownloadThread(31743): Current speed = 3979
测试显示,如果睡眠一秒钟,下载量急剧下降到大约1/450!
虽然这取决于下载循环中的操作类型,但取决于环境。这是具体案例下的实验结论
答案 0 :(得分:1)
降低下载速度非常简单。只需从InputStream中读取更慢:
public byte[] rateLimitedDownload(InputStream in, int bytesPerSecond) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[bytesPerSecond];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// nothing
}
}
return out.toByteArray();
}
此代码并不完美 - 不考虑实际从中读取的时间,并且读取可能低于预期。它应该会给你一个想法。