2010-04-14 9 views

Respuesta

14

No en el InputStream en general, pero puede usar Socket#setSoTimeout(int) para establecer un tiempo de espera para todas las operaciones de lectura en el mismo socket.

+1

Ah gracias, me perdí esa. Mi única pregunta de seguimiento es la siguiente: esta vez parece contar para cada vez que se invoca read(), que puede ser varias veces. ¿Hay alguna manera de configurar el tiempo de espera completo de modo que se agote el tiempo de espera si la suma de cada lectura() excede el tiempo de espera? – Zombies

+0

No de forma automática, pero puede establecer un tiempo de espera S0 más corto que su tiempo de espera real y comprobar en un bucle si ha excedido el tiempo total de ejecución permitido. – jarnbjo

+4

Tenga cuidado al usar un tiempo de espera de socket y DataInputStream juntos (y también un BufferredInputStream). Estos almacenarán o leerán algunos datos en la memoria temporal (como en getLong()) y luego, si se agota el tiempo de espera (esperando más datos del socket) perderá cualquiera de los datos leídos anteriormente y * no hay forma de recuperarlos * . SocketTimeoutException extiende InterruptedIOException que proporciona la cantidad de bytes transferidos con éxito antes del tiempo de espera. Con un zócalo sin procesar, puede usar esto para reintentar/continuar (quizás para vaciar el mensaje incorrecto). –

Cuestiones relacionadas