Java Sockets non bloquantes lire
Je suis en utilisant un DataInputStream à lire des caractères/de données à partir d'une prise.
Que je veux utiliser .readUnsignedShort(); il lève une exception si il n'y a pas 2 octets à lire. Dois-je sous-classe DataInputStream et de remplacer les méthodes d'ajout d'exceptions, ou est-il un moyen plus facile?
OriginalL'auteur clarity | 2010-08-23
Vous devez vous connecter pour publier un commentaire.
Si vous voulez quelque chose de rapide et sale, essayez de inputStream.().
Si vous voulez un vrai les lectures non bloquantes et des rappels lorsque les données sont disponibles, je pense que Pablo réponse est mieux.
OriginalL'auteur NG.
Je pense que Java NIO non bloquant les classes sont votre meilleur choix. Vérifier SocketChannel de la classe et de ses exemples de code.
Mais attention, lorsque vous émettez votre commande de lecture, cela pourrait être le cas que les octets ne sont pas encore disponibles, mais cela ne signifie pas que la volonté jamais arriver à votre socket...
OriginalL'auteur Pablo Santa Cruz
C'est une manière simple de bloquer aussi longtemps que vous le souhaitez.
Pour une solution plus élégante, vous pouvez envisager d'utiliser NIO.
Exactement. C'est mieux que d'ouvrir le programme pour les attaques DOS, mais à l'aide de NIO serait encore mieux.
Je suis d'accord, @StealthRabbi. Supprimer le mot élégant. 🙂
OriginalL'auteur Zsolt Safrany
Si l'entrée se termine avant la fourniture de deux octets qu'il va jeter EOFException. Si il n'y a pas d'entrée disponibles() renvoie zéro, mais il peut aussi renvoyer zéro si il y est d'entrée dans certaines circonstances (par exemple, SSL).
OriginalL'auteur user207421