Je voulais ajouter plusieurs connexions dans le code ci-dessous pour pouvoir télécharger des fichiers plus rapidement. Quelqu'un pourrait-il m'aider? Merci d'avance.Connexions multiples Java téléchargement de fichier
public void run() {
RandomAccessFile file = null;
InputStream stream = null;
try {
// Open connection to URL.
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
// Specify what portion of file to download.
connection.setRequestProperty("Range",
"bytes=" + downloaded + "-");
// Connect to server.
connection.connect();
// Make sure response code is in the 200 range.
if (connection.getResponseCode()/100 != 2) {
error();
}
// Check for valid content length.
int contentLength = connection.getContentLength();
if (contentLength < 1) {
error();
}
/* Set the size for this download if it
hasn't been already set. */
if (size == -1) {
size = contentLength;
stateChanged();
}
// Open file and seek to the end of it.
file = new RandomAccessFile("C:\\"+getFileName(url), "rw");
file.seek(downloaded);
stream = connection.getInputStream();
while (status == DOWNLOADING) {
/* Size buffer according to how much of the
file is left to download. */
byte buffer[];
if (size - downloaded > MAX_BUFFER_SIZE) {
buffer = new byte[MAX_BUFFER_SIZE];
} else {
buffer = new byte[size - downloaded];
}
// Read from server into buffer.
int read = stream.read(buffer);
if (read == -1) {
break;
}
// Write buffer to file.
file.write(buffer, 0, read);
downloaded += read;
stateChanged();
}
/* Change status to complete if this point was
reached because downloading has finished. */
if (status == DOWNLOADING) {
status = COMPLETE;
stateChanged();
}
} catch (Exception e) {
error();
} finally {
// Close file.
if (file != null) {
try {
file.close();
} catch (Exception e) {
}
}
// Close connection to server.
if (stream != null) {
try {
stream.close();
} catch (Exception e) {
}
}
}
}
Comprenez-vous le code que vous avez déjà? Parce qu'il semble très autonome, et tout ce que vous devez faire est de créer plusieurs instances et de les passer à un pool de threads. – Anon
Et une question plus fondamentale: pourquoi croyez-vous que l'ajout de plusieurs connexions vous permettra de télécharger plus rapidement? À moins que votre serveur ne ralentisse activement le débit, vous l'utiliserez déjà à proximité du pipeline complet. – Anon
@Anon: c'est un truc commun. Cela permet d'avoir plus de connexions lorsque le RTT vers le serveur est tel que vous ne pouvez pas garder le tuyau plein (votre max est de 1 fenêtre de réception par RTT, quelle que soit la bande passante). Cela aide également lorsque vous rencontrez de la congestion quelque part, car TCP essaie de donner à chaque * connexion * une part équitable. Plus de connexions, plus de partages, plus de bande passante. Cependant, il est peu probable que vous ayez un incrément linéaire avec le nombre de connexions. – PypeBros