Tengo un DataInputStream
que obtuve de un Socket
. ¿Hay alguna manera de establecer un tiempo de espera para dis.read(...)
? Actualmente genero un nuevo hilo para hacer la lectura. Mientras que el hilo padre hace un thread.join(timeout)
para esperar antes de interrumpirlo. Soy consciente de nio, pero no creo que quiera refactorizar mucho en este punto. Gracias.¿Puedo establecer un tiempo de espera para la función de lectura() de InputStream?
7
A
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.
Cuestiones relacionadas
- 1. Establecer un tiempo de espera para leer stdin
- 2. Establecer el tiempo de espera para webClient.DownloadFile()
- 3. ¿Puedo establecer el tiempo de espera para UdpClient en C#?
- 4. Establecer un límite de tiempo de espera para readLine()?
- 5. ¿Cómo implementar un tiempo de espera en la llamada de función de lectura?
- 6. Establecer un tiempo de espera para una función específica/bloque de código (no todo el script)?
- 7. ¿Cómo puedo establecer un tiempo de espera contra un BufferedReader basado en un URLConnection en Java?
- 8. Java: tiempo de espera de lectura de socket excepción
- 9. Tiempo de espera para BackgroundWorker
- 10. Establecer el tiempo de espera para ajax (jQuery)
- 11. IOException durante la lectura de InputStream
- 12. ¿Cómo puedo establecer un tiempo de espera para las conexiones http de los clientes en node.js
- 13. Tiempo de espera para thread.join()
- 14. Java InputStream espera datos.
- 15. Establecer el tiempo de espera en simplexml_load_file
- 16. Establecer el tiempo de espera del unicornio
- 17. ¿Puedo establecer un tiempo de espera JDBC para una sola consulta?
- 18. Lectura de un inputStream todo de una vez
- 19. ¿Cuál es la diferencia entre conexión y tiempo de espera de lectura para enchufes?
- 20. Agregar un tiempo de espera para getchar()
- 21. Cómo borrar un tiempo de espera Javascript thats establecer dentro de una función
- 22. establecer el tiempo de espera para el socket recibir
- 23. Cómo establecer un tiempo de espera para la consulta de MySQL con C API
- 24. Tiempo de espera una función en PHP
- 25. Android: ¿Cómo puedo establecer un tiempo de espera para los sockets SSL para un bloqueo de lectura/escritura utilizando el ThreadSafeClientConnectionManager?
- 26. Lectura de InputStream como UTF-8
- 27. ejecutar la función de tiempo de espera con
- 28. Cómo establecer un tiempo de espera para el método File.Create en la unidad de red?
- 29. HttpWebRequest Tiempo de espera
- 30. Establecer tiempo de espera de solicitud OLE desde C++
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
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
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). –