Quelle est la différence entre peut déterminer le flux réseau terminé? p> p>
3 Réponses :
Selon le doc , introuvableam.read (tampon)! = - 1 code> vous dira que le flux est terminé. INPUTREAM.LREAD (tampon) == 0 code> dit simplement qu'il n'y a pas d'octets disponibles à lire, mais le flux est toujours actif (c'est-à-dire que la pair n'a rien envoyé depuis que vous avez lu la dernière fois que vous avez lu tout ce que vous avez lu) . p>
InputStream code> bloquera si aucune donnée n'est disponible. Cela ne signifie pas ce que vous dites cela signifie.
Les Javadocs pour introuvableam.read () code> dis:
Si la longueur de
B code> est zéro, aucun octet n'est lu et 0 est renvoyé p> blockQuote>En utilisation normale, cela ne devrait jamais arriver, il n'ya donc pas beaucoup de point à tester pour cette condition explicitement. (Si vous souhaitez éviter de boucler pour toujours parce que le tampon est zéro de longueur et échouez-vous-rapide dans cette situation, testez simplement la longueur du tampon.) P>
plus loin, il y a: P>
retours: strong> Le nombre total d'octets lus dans la mémoire tampon ou -1 code> s'il n'y a plus de données car la fin du flux a été atteinte. p> blockQuote>Si vous souhaitez tester pour fin de fichier em> (ou flux réseau, ou autre), utilisez le test: p>
xxx pré> Une implémentation de Java non buggy ne retournera jamais rien d'autre pour indiquer qu'il n'y a plus de données disponibles. p> p>
...attends quoi? Voulez-vous dire écrire ! = -1 code> au lieu de ! = 0 code> dans votre dernier paragraphe?
@Ilmarikaronen Désolé, il est censé être -1 code>, merci de ramasser à ce sujet. Fondamentalement "ce que les documents vous disent explicitement d'utiliser."
@Andreylebedenko - Dans quelles conditions cela ferait-il une lecture zéro plutôt que de bloquer cependant?
Si vous savez déjà que la longueur de la mémoire tampon n'est pas nulle, Il n'y a aucune différence efficace entre ces deux expressions em>. Compte tenu de cette stipulation de base sur un tampon valide, on peut déduire de la DOCS que Cette méthode bloque jusqu'à ce que les données d'entrée soient disponibles, la fin du fichier est détectée ou une exception est lancée. P>
blockQuote> lue code> ne retournera jamais 0 code> fort>. p>
Il va sans dire que la seule valeur de retour négatif possible est -1 code>.
Le premier ne détecte pas
introuvableam.read () == 0 code>, qui est une réponse valide.doc.oracle. COM / Javase / 6 / Docs / API / Java / IO / ... . Tout est expliqué dans l'API DOC.
@RODDY, je pense qu'il est utile de signaler - si nous savons que
tampon code> a une longueur de 1024 comme indique qu'Adam indique dans la question, la seule réponse valide selon la API < / a> serait -1 ou supérieur à zéro. Une réponse de zéro indiquerait une faute sous-jacente, quelque chose qui devrait probablement être escaladé en lançant unillegalStateException code>, mais certainement pas accepté comme valide.@Michaelallan - point équitable, mais vous devriez probablement commenter que sur la réponse i>, ne répondant pas à un commentaire que quelqu'un a quitté il y a 8 ans.