Comment pouvez-vous faire BufferedReader.readLine() accroche pas?
Est-il un moyen de faire BufferedReader.readLine()
accroche pas?
Je suis en création d'un serveur qui:
- Vérifie si le client a livré une entrée.
- Si pas, il exécute le code des autres et, éventuellement, des boucles de retour à la vérification du client pour l'entrée.
Comment puis-je vérifier si le client a livré une entrée sans courir readLine()
? Si je lance readLine()
, le thread se bloque jusqu'à ce que l'entrée est livré?
Pourquoi? Le serveur doit avoir une lecture thread par client si vous êtes à l'aide de blocage I/O.
Je ne veux pas créer deux threads pour chaque utilisateur. J'en ai déjà un thread pour chaque utilisateur.
C'est la triste réalité de Java I/O bibliothèque. Vous pouvez soit 1) la rotation des threads séparés pour la lecture 2) Utiliser le NIO bibliothèque 3) Ne pas utiliser readLine() et faire votre propre mise en mémoire tampon et de fin de ligne de gestion de vous-même
Je ne veux pas créer deux threads pour chaque utilisateur. J'en ai déjà un thread pour chaque utilisateur.
C'est la triste réalité de Java I/O bibliothèque. Vous pouvez soit 1) la rotation des threads séparés pour la lecture 2) Utiliser le NIO bibliothèque 3) Ne pas utiliser readLine() et faire votre propre mise en mémoire tampon et de fin de ligne de gestion de vous-même
OriginalL'auteur Cin316 | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
BufferedReader.ready()
, comme ceci:ready()
sera de retourtrue
si la source d'entrée n'a pas mettre n'importe quoi dans le ruisseau qui n'a pas été lu.Edit: Juste une remarque, prêt sera de retour
true
quand même d'un seul caractère est présent. Vous pouvez utiliserread()
pour vérifier si il y a un saut de ligne ou un retour chariot, et ceux qui indiquerait une fin de ligne.Pour plus d'info: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()
read()
ne bloque pas? Le lien ne dit rien surreadLine()
.Même si il est prêt, ça veut seulement dire qu'il y a au moins un octet, pas nécessairement l'ensemble de la ligne. Cela ne fonctionnera pas nécessairement dans tous les cas, si vous pouvez avoir de la chance et il va travailler pour ce que vous faites.
OriginalL'auteur Cin316