Est-il possible de lire à partir d'un InputStream avec un délai d'attente?

Plus précisément, le problème est d'écrire une méthode comme ceci:

int maybeRead(InputStream in, long timeout)

où la valeur de retour est la même que dans.read() si les données sont disponibles au sein de 'timeout' millisecondes, et 2 sinon. Avant le retour de la méthode, tout engendré fils doit quitter.

Pour éviter les disputes, le sujet ici java.io.InputStream, tel que documenté par le Soleil (n'importe quel version de Java). Veuillez noter que ce n'est pas aussi simple qu'il y paraît. Ci-dessous sont quelques-uns des faits qui sont pris en charge directement par le Soleil de la documentation.

  1. La dans.méthode read() peut être non-interruptible.

  2. Emballage de la InputStream dans un Lecteur ou InterruptibleChannel ne vous aide pas, parce que toutes les classes peuvent faire est d'appeler les méthodes de l'InputStream. S'il était possible d'utiliser ces classes, il serait possible d'écrire une solution qui ne fera qu'exécuter la même logique directement sur la InputStream.

  3. Il est toujours acceptable pour dans.disponible() renvoient 0.

  4. La dans.la méthode close() peut bloquer ou de ne rien faire.

  5. Il n'existe pas de façon de tuer un autre thread.

InformationsquelleAutor | 2009-04-30