Desafortunadamente, no, las clases java.io.*
no responden a las interrupciones cuando están bloqueadas en métodos de lectura o escritura. Normalmente, lo que tienes que hacer es cerrar la transmisión y luego manejar el IOException
que se lanza. Tengo este patrón repetido a lo largo de mi código:
try {
for (;;) {
try {
inputStream.read(data);
thread.join();
}
catch (IOException exception) {
// If interrupted this isn't a real I/O error.
if (Thread.interrupted()) {
throw new InterruptedException();
}
else {
throw exception;
}
}
}
}
catch (InterruptedException exception) {
}
Alternativamente, las nuevas clases java.nio.*
manipule interrupciones mejores y generar InterruptedIOException
s cuando son interrumpidos. Tenga en cuenta que esta excepción se deriva de IOException
y no de InterruptedException
, por lo que probablemente necesite dos cláusulas catch
para manejar cualquier tipo de excepción, una para InterruptedException
y otra para InterruptedIOException
. Y querrá cualquier cláusula catch interna IOException
para ignorar InterruptedIOException
s.
Normalmente no obtienes nada. – erickson
NB El error de larga duración se resolvió en 2011: "Esto ya no es un problema en jdk7 porque la E/S interrumpible heredada está deshabilitada de manera predeterminada en Solaris. Nunca se implementó en Winodws y no se implementó en Linux desde jdk1. 3. " – EJP