IOUtils.kopieren und IOUtils.copyLarge sind sehr langsam
Habe ich umgesetzt, ein REST-service für das herunterladen von mittlerer Größe (250 Mb) zip-Datei mit IOUtils.copy(), ähnlich wie Die meiste effektive Art zum schreiben der Datei zu bestimmen ServletOutputStream. Der REST service aufgerufen wird von einem anderen app mit HttpURLConnection. Ich IOUtils verwenden.copy() auf der empfangenden Seite zu speichern Sie die Datei auf der Festplatte.
Dauert es über 30 Minuten, um eine Datei herunterzuladen. Dies ist Weg zu langsam.
Ideen? Bessere Implementierungen?
- Kannst du die relevanten code für uns zu inspizieren?
- Haben Sie versucht, was vorgeschlagen wurde von
BalusC
auf der gleichen Seite: stackoverflow.com/a/4647337/20634 ? Wenn ja, was sind die Ergebnisse ? - Seine höchst unwahrscheinlich zu sein wegen der software. Seine weit mehr wahrscheinlich wegen der Bandbreite oder hardware-Probleme. Die übertragungsgeschwindigkeit ist 1.1 Mb/s, die eine gemeinsame Grenze für Breitband-upload-Geschwindigkeiten.
- Ich habe nicht implementiert FileChannels von BalusC, da ich gesehen habe keine Anzeichen dafür, dass Sie schneller gehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich das Problem.
War ich sowohl der client und der server auf der gleichen Maschine zum testen. Sobald ich zog man an einen anderen Rechner, der transfer dauerte etwas mehr als eine minute.
Können Sie den Quellcode zu Lesen und sehen Sie selbst, dass die default buffer size ist 4096.
Ich persönlich 8192 als Puffer-Größe in einem bestimmten Fall.
Betrachten Sie das Spiel mit der buffer-Größe.
Sie implementieren können diese kopieren ganz einfach auf Ihre eigenen, oder sehen Sie sich die Quellcode-Datei hier, als Referenz.
Zusätzlich, sollten Sie multi-threaded download, wenn möglich, wie Ihr server unterstützt mehrere verbindungen (nehme ich an).