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?
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.
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é. "
En bref - votre compréhension est correcte.
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.