Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

understanding URLConnection.setReadTimeout()

Consider the following snippet:

URLConnection connection = target.openConnection();

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

Does the connection.setReadTimeout sets the maximum time available for STARTING read data or is it the maximum time available for COMPLETING read data?

My understaning is that with that, java has 10 seconds to start reading the next byte of data from the connection. There is no timeout for finishing read all data from the connection as we do not know how big the strean may be. Is it correct?

like image 384
lviggiani Avatar asked Jul 03 '14 12:07

lviggiani


People also ask

What is URLConnection in Java?

The abstract class URLConnection is the superclass of all classes that represent a communications link between the application and a URL. Instances of this class can be used both to read from and to write to the resource referenced by the URL.

How to Set read timeout in java?

Answer: Just set the SO_TIMEOUT on your Java Socket, as shown in the following sample code: String serverName = "localhost"; int port = 8080; // set the socket SO timeout to 10 seconds Socket socket = openSocket(serverName, port); socket. setSoTimeout(10*1000);

What is the default timeout for HttpURLConnection?

Appears the "default" timeouts for HttpURLConnection are zero which means "no timeout."

What is meant by URL connection?

URLConnection is an abstract class whose subclasses form the link between the user application and any resource on the web. We can use it to read/write from/to any resource referenced by a URL object. There are mainly two subclasses that extend the URLConnection class.


Video Answer


3 Answers

It is for "starting" read data. The timeout is there to set a limit on how long the wait is for incoming data. The timeout doesn't apply when there is data available for reading.

"If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised."

Oracle Reference

In short - your understanding is correct.

like image 159
Andrew_CS Avatar answered Oct 29 '22 17:10

Andrew_CS


According to oracle docs, if no data is available for the read timeout period, exception can be thrown

A SocketTimeoutException can be thrown when reading from the returned input stream if the read timeout expires before data is available for read.

like image 44
Pesho Avatar answered Oct 29 '22 17:10

Pesho


you are right! connection.setReadTimeout not mean read complete, it mean when wait for 10s, when there're no more data read in, will throw a timeoutexception.

like image 38
Nile Avatar answered Oct 29 '22 16:10

Nile