Best way to block on a socket for data
<p>What is the efficient way of blocking on the socket for data after opening it.The method i used is to call read on input stream (this is a blocking call that waits till some data written to this socket).</p>

<pre><code>//Socket creation
SocketForCommunication = new Socket();
InetSocketAddress sAddr = new InetSocketAddress("hostName", 8800);
SocketForCommunication.connect(sAddr,10000);
is = new DataInputStream(SocketForCommunication.getInputStream());
os = new DataOutputStream(SocketForCommunication.getOutputStream());

//Waiting on socket using read method for data
while(true)
{
    int data = is.read();
    if(data == HEADER_START)
    {
        processPackage(is);
    }
}
</code></pre>

<p>Here problem is read can timeout.Is there a way to register a callback that gets called when data available to read on socket.?</p>
