Warum ist das Herunterladen von Dateien mit Java so gering?

8

Ich habe einen einfachen Java Downloader geschrieben und ich habe Probleme mit der Geschwindigkeit.

Zuerst ist die Geschwindigkeit in Ordnung - genau wie wenn ich meinen Browser verwende, um diese Datei herunterzuladen. Aber nach einer Weile nimmt die Geschwindigkeit stark ab und wechselt alle zwei Sekunden - von 42kb / s auf 64kb / s und von 64kb / s auf 42kb / s.

Mein Code:

%Vor%

Was soll ich tun, um die Geschwindigkeit des Downloads zu maximieren?

AKTUALISIEREN

Die Dateigrößen variieren zwischen 1 und ca. 100 MB. Ich habe den Puffer auf 65536 erhöht, bis er gleich ist.

Über das Messen: Ich überprüfe alle 3 Sekunden, wie viele Bytes geschrieben wurden, und teile es dann durch 3 und durch 1024 - es gibt mir kb / s

    
Bosss 22.05.2011, 07:45
quelle

1 Antwort

5

Geschwindigkeit zu erhöhen, bis an die Grenze Ihrer Bandbreite und Serverkapazität soll eine Anwendung mehrere Verbindungen verwendet (mehr als nur ein) mit Multi-Threaded-Code: jeder Thread erstellt eine eigene Verbindung und Anfragen für Teile der Datei.

Ein Beispiel für eine solche Anwendung ist IBM Download-Direktor die drei HTTP-Verbindungen häufig verwendet, um große Dateien abrufen. Die meisten FTP-Clients können auch mit mehreren Verbindungen arbeiten, um den Durchsatz zu erhöhen. In Java, Apache Httpclient verwendet werden Anwendung zu schreiben, eine solche Multi-Threading.

Sie haben das in Ihrer URL verwendete Protokoll nicht beschrieben. Wenn HTTP, gibt ein HEAD Anfrage die Dateilänge und GET mit Unterstützung Chunking verwendet wird für die Dateiteile abzufragen.

Wahrscheinlich können Sie eine bessere Leistung sogar mit einer einzigen Verbindung, wenn Sie direkt HttpURLConnection verwenden und Wert für ChunkedStreamingMode.

Wenn Sie noch nicht zufrieden sind, geben Sie bitte weitere Einzelheiten an:

  • Was Ihr "Aber nach einer Weile" bedeutet, laden Sie viele Dateien nacheinander herunter?
  • Was ist das Protokoll? Verwenden Sie einen bestimmten URLStreamHandler?
  • Haben Sie Ihren JVM-Speicher und die Speicherbereinigung überprüft?
  • Ihre Workstation ist möglicherweise damit beschäftigt, etwas anderes zu tun: verwendete CPU, Netzwerkbandbreite, die von etwas anderem genutzt wird, Antivirus verlangsamt den Festplattenzugriff?
  • Möchten Sie über einen Proxy passieren: einige HTTP-Proxy-Bandbreite nach einigen Minuten auf derselben Verbindung reduzieren kann ...
Yves Martin 25.05.2011 11:25
quelle

Tags und Links