Non avevi specificato che la lettura avveniva da una Socket, ma da un generico BufferedInputStream (che può essere costruito anche su un file).

Per i timeout da socket, c'è il metodo apposito setSoTimeout() che fa sollevare una SocketTimeoutException ogni tot millisecondi di timeout nella read dalla socket.


Ciao.