Hallo.
Habe mal aus Langeweile ein simples Java Programm geschrieben welches die maximale Download-Bandbreite herausfinden soll. Hierzu werden in mehreren Threads parallel 30 Sekunden lang große Dateien von schnellen http Servern gezogen, die Anzahl der gelesenen Bytes wird gespeichert. Danach wird das Ergebnis berechnet, hier kommt es zu erstaunlichen Ergebnissen: speedmeter bescheinigt mir bei jedem Test 708 Kilobyte/s, hier die reproduzierbaren Ergebnisse meines Programms:
771 Kilobyte/s (1 kB = 10^3 byte)
6168 Kilobit/s (1 kbit = 10^3 bit)
753 Kibibyte/s (1 KiB = 2^10 byte)
6024 Kibibit/s (1 Kibit = 2^10 bit)
Wie ist das zu erklären? Welche Daten sind nun korrekt? Habe Arcor 6000 (Win XP SP2, cfos speed treiber). Im Grunde müssten die Daten von meinem Programm korrekt sein, weil die Anzahl der gelesenen Bytes in einer bestimmten Zeitspanne ja eigentlich eindeutig sind. Hier mal der code:
http://pastebin.com/d2299b544
BTW: Interessanterweise fallen die Ergebnisse etwas schlechter aus, wenn ich einen BufferedInputStream anstelle des InputStream verwende (aber immer noch besser als bei speedmeter). Wieso das so ist ist mir auch noch schleierhaft, denn gepufferte IO sollte ja eigentlich schneller sein.
EDIT: offensichtlich ist meine Messmethode doch nicht so genau. Hab mal testweise die 30 sekunden angehoben auf 1 minute, 2 minuten, bis 4 minuten. Resultat: Die Transferrate sinkt. Auf 2 Minuten nur noch 717kB/s im Schnitt und auf 4 Minuten 713kB/s. Kann mir jemand erklären wie das zustande kommt?