2009-04-19 7 views
1

Je veux lire à partir d'un java.io.InputStream avec un délai d'expiration. Apparemment, la façon correcte de le faire est d'utiliser java.nio.channels.SelectableChannel et java.nio.channels.Selector. Malheureusement, il n'est pas clair comment passer d'un InputStream à un SelectableChannel.Comment obtenir SelectableChannel à partir d'un InputStream?

Le InputStream provient d'une source non conventionnelle - http://java.sun.com/products/javacomm/reference/api/javax/comm/CommPort.html#getInputStream()

+2

Désolé Gili, ça ne va pas marcher avec javax.comm. Vous pourriez être capable de pirater le projet rxtx pour implémenter votre propre canal sélectionnable ... mais à moins que vous essayiez de l'intégrer avec un paquet qui fonctionne déjà avec * n'importe quel * SelectableChannel, c'est probablement plus de travail que nécessaire pour obtenir/O. – erickson

+1

Comment implémenteriez-vous un tout nouveau SelectableChannel? On ne sait pas comment RXTX peut même fournir sa propre implémentation. – Gili

Répondre

2

Tous les InputStream s sont garantis au choix, donc il n'y a aucun moyen simple de le faire. Il est regrettable que la classe CommPort ne dispose pas d'une méthode pour retourner un SelectableChannel; il n'y a pas de moyen facile et portable d'accomplir ceci (c'est-à-dire, sans casser complètement l'encapsulation).

1

NIO est cassé à cet égard. Tout ce que vous avez à faire est de regarder un peu le code et de voir tous les castings qui demandent des canaux comme SocketChannel etc. Il n'est pas possible de réutiliser quoi que ce soit dans NIO pour un autre type de canal d'E/S.

Dernière fois que j'ai demandé il n'y avait pas de plans pour résoudre ce problème pour la réutilisation générique.

Questions connexes