0

Javaを使用してダウンロード速度を計算する次のコードを作成しました。しかし、正しい結果が得られません。何が問題なのですか?私のロジックに問題がありますか?それとも Java ネットワーク クラスの使用法に問題があるのでしょうか?Java ネットワーク クラスの使用法に問題があると思います。私は正確に何が問題なのですか?

/*Author:Jinu Joseph Daniel*/
import java.io.*;
import java.net.*;
class bwCalc {
    static class CalculateBw {
            public void calculateUploadBw() {}
            public float calculateDownloadRate(int waitTime) throws Exception {
               int bufferSize = 1;
               byte[] data = new byte[bufferSize]; // buffer
               BufferedInputStream in = new BufferedInputStream(new URL("https://www.google.co.in/").openStream());
               int count = 0;
               long startedAt = System.currentTimeMillis();
               long stoppedAt;
               float rate;
                while (((stoppedAt = System.currentTimeMillis()) - startedAt) < waitTime) {
                    if ( in .read(data, 0, bufferSize) != -1) {
                    count++;
                } else {
                    System.out.println("Finished");
                    break;
                }
            }
            in .close();
            rate = 1000 * (((float) count*bufferSize*8 / (stoppedAt - startedAt)) )/(1024*1024);//rate in Mbps
            return rate;
        }
    public float calculateAverageDownloadRate() throws Exception{
        int times[] = {100,200,300,400,500};
        float bw = 0,curBw;
        int i = 0, len = times.length;
        while (i < len) {
            curBw = calculateDownloadRate(times[i++]);
            bw += curBw;
            System.out.println("Current rate : "+Float.toString(curBw));
        }
        bw /= len;
        return bw;
    }
}
public static void main(String argc[]) throws Exception {
    CalculateBw c = new CalculateBw();
    System.out.println(Float.toString(c.calculateAverageDownloadRate()));
}
}
4

2 に答える 2

3

あなたのコードには多くの問題があります...

  • 読んでいるバイト数をチェックしていません
  • コンテンツのサイズが非常に小さく、ダウンロード時間のほとんどがネットワークの遅延に関連しているため、Google のホームページでテストしても意味がありません。大きなファイル (10 MB 以上) をダウンロードしてみてください。実際に帯域幅ではなく遅延を測定したい場合を除きます。その場合は、単純に ping を実行できます
  • また、関連する結果を取得したい場合は、500 ミリ秒以上かかる必要があります。少なくとも 5 秒は必要です。
  • 多くのコード スタイルの問題がありますが、それらはそれほど重要ではありません
于 2013-02-23T11:09:32.007 に答える