Die Messung Download-Geschwindigkeit Von Java
Arbeite ich auf das herunterladen einer Datei auf einer software, dies ist, was ich habe, es sucesfully download, und auch ich kann Fortschritt, aber noch 1 Sache übrig, die ich nicht wissen, wie zu tun ist. Messen Sie die download-Geschwindigkeit. Ich würde Ihre Hilfe schätzen. Danke.
Dies ist die aktuelle download-Methode code
public void run()
{
OutputStream out = null;
URLConnection conn = null;
InputStream in = null;
try
{
URL url1 = new URL(url);
out = new BufferedOutputStream(
new FileOutputStream(sysDir+"\\"+where));
conn = url1.openConnection();
in = conn.getInputStream();
byte[] buffer = new byte[1024];
int numRead;
long numWritten = 0;
double progress1;
while ((numRead = in.read(buffer)) != -1)
{
out.write(buffer, 0, numRead);
numWritten += numRead;
this.speed= (int) (((double)
buffer.length)/8);
progress1 = (double) numWritten;
this.progress=(int) progress1;
}
}
catch (Exception ex)
{
echo("Unknown Error: " + ex);
}
finally
{
try
{
if (in != null)
{
in.close();
}
if (out != null)
{
out.close();
}
}
catch (IOException ex)
{
echo("Unknown Error: " + ex);
}
}
}
InformationsquelleAutor Jesus David Gulfo Agudelo | 2011-06-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der gleichen Weise würden Sie Messen alles.
System.nanoTime()
gibt eineLong
Sie verwenden können, um zu Messen, wie lange etwas dauert:Nun haben Sie die Anzahl der Nanosekunden dauerte es zu Lesen X bytes. Die Mathematik zu tun, und Sie haben Ihre download-rate.
Mehr als wahrscheinlich, Sie suchen nach bytes pro Sekunde. Verfolgen Sie die Gesamtzahl der bytes, die Sie gelesen haben, zu überprüfen, ob eine Sekunde abgelaufen ist. Einmal eine Sekunde vergangen, herauszufinden, die rate basiert auf wie viele bytes ein, die Sie gelesen haben in dieser Zeit. Zurücksetzen der Summe wiederholen.
die Formel zum konvertieren der Zeit, dass
InputStream.read()
im KB-MB-GB/s? Die Antworten, die hilft, die Zeit Messen, die der Ausführung vonInputStream.read()
.InformationsquelleAutor Brian Roach
Ich kann Ihnen eine Allgemeine Idee. Das starten eines Timers, am Anfang der download. Nun, multiplizieren Sie die
(percentage downloaded)
durch diedownload size
, und teilen Sie durch dietime elapsed.
gibt Sie Durchschnittliche download-Zeit. Hoffe ich bekomme Sie auf dem richtigen Weg!Können Sie
System.nanoTime();
wie vorgeschlagen von Brian.Setzen
long startTime = System.nanoTime();
außerhalb deiner while-Schleife. undlong estimatedTime = System.nanoTime() - startTime;
wird Ihnen die abgelaufene Zeit innerhalb der Schleife.Long-Put startTime = System.nanoTime(); außerhalb deiner while-Schleife. und lange estimatedTime = System.nanoTime() - startTime; geben Sie die aktuelle Zeit
Ja habe versucht, wie dies
long startTime = System.nanoTime();
außerhalb, während, undLong end = System.currentTimeMillis()*1000;
innen nach Puffer schreiben, aber scheint zu funktionieren nur einmal?, auch Hinzugefügt dieserspeed= (int) ((1024/(double) (start-end)));
, weil der Puffer 1024 bytesHey, ich bin auf der Suche für das gleiche. Haben Ihr code arbeitete nach tun, wie Sie oben angegeben Kommentar.
InformationsquelleAutor Anirudh Ramanathan
hier ist meine Umsetzung
InformationsquelleAutor AZ_