我正在開發一個Android應用程序,我需要儘可能準確地測量當前連接的下載速度。這是我能找到到目前爲止最好的方法(基本上我啓動一個定時器,開始從快速的服務器下載一個Linux發行版,下載大約200字節,則停止計時器,並檢查時間流逝和下載的總字節數):使用Java/Android測量下載速度
try{
InputStream is = new URL("http://www.domain.com/ubuntu-linux.iso").openStream();
byte[] buf = new byte[1024];
int n = 0;
startBytes = TrafficStats.getTotalRxBytes(); /*gets total bytes received so far*/
startTime = System.nanoTime();
while(n<200){
is.read(buf);
n++;
}
endTime = System.nanoTime();
endBytes = TrafficStats.getTotalRxBytes(); /*gets total bytes received so far*/
totalTime = endTime - startTime;
totalBytes = endBytes - startBytes;
}
catch(Exception e){
e.printStackTrace();
}
之後,我只需要將傳輸的字節數除以所花費的時間,它將以bps爲單位給出下載速度。
問題: 1.此方法是否準確? 2.你認識一個更好的嗎?
非常感謝。
他們的方式,你有它設置,現在,它不會是準確的。 InputStream.read不能保證完全填充你的緩衝區。您需要檢查返回值以查看實際讀取的字節數。 – Jeffrey
@Jeffrey,你沒有詳細閱讀代碼。我不依賴read()來獲取字節數。我通過getTotalRxBytes()函數直接從操作系統獲取它。 –
啊,我的不好。我確實在那部分上略過。您擁有的解決方案將會或多或少精確。 – Jeffrey