web-dev-qa-db-fra.com

comprendre URLConnection.setReadTimeout ()

Considérez l'extrait de code suivant:

URLConnection connection = target.openConnection();

connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec

Est-ce que le connection.setReadTimeout définit le temps maximum disponible pour DÉMARRER les données de lecture ou est-ce le temps maximum disponible pour TERMINER les données de lecture?

Ma compréhension est qu'avec cela, Java a 10 secondes pour commencer à lire le prochain octet de données de la connexion. Il n'y a pas de délai pour terminer la lecture de toutes les données de la connexion car nous ne savons pas comment peut être gros, est-ce correct?

18
lviggiani

Selon Oracle docs, si aucune donnée n'est disponible pour le délai de lecture, une exception peut être levée

Une exception SocketTimeoutException peut être levée lors de la lecture à partir du flux d'entrée renvoyé si le délai de lecture expire avant que les données ne soient disponibles pour la lecture.

9
Pesho

C'est pour "démarrer" les données lues. Le délai est là pour définir une limite sur la durée de l'attente des données entrantes. Le délai d'attente ne s'applique pas lorsqu'il existe des données disponibles pour la lecture.

"Si le délai d'expiration expire avant que des données ne soient disponibles pour la lecture, un Java.net.SocketTimeoutException est relevé. "

Référence Oracle

En bref - votre compréhension est correcte.

12
Andrew_CS

vous avez raison! connection.setReadTimeout ne signifie pas que la lecture est terminée, cela signifie que lorsque vous attendez 10 secondes, lorsqu'il n'y a plus de données lues, une exception de timeout sera levée.

5
Sam