1

私はAndroidHttpClientインターネットからビデオをダウンロードするために使用します。AndroidHttpClientダウンロード速度を上げる方法はありますが、またはHttpURLConnection?を使用してダウンロード速度を遅くする方法を知りたいです。そのまたはいくつかのソリューションのためのインターフェースまたは構成はありますか?

** * ** * ** * ** * ** * *更新* ** * ** * ** * ** * ** * *

いくつかのテストを行ったところ、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 秒間スリープすると、ダウンロードが約 1/450 に大幅に低下することが示されています。

これは、ダウンロード ループで実行された操作の種類と、環境に依存します。これは特定のケースでの実験的結論です

4

1 に答える 1

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();
}

このコードは完全ではありません。実際に in からの読み取りに費やされた時間は考慮されず、読み取りは予想よりも少ない可能性があります。しかし、それはあなたにアイデアを与えるはずです。

于 2013-11-06T09:58:01.420 に答える