8
votes

Entrée flux.Read Retour 0 ou -1?

Quelle est la différence entre xxx

peut déterminer le flux réseau terminé?


3 Réponses :


0
votes

Selon le doc , introuvableam.read (tampon)! = - 1 vous dira que le flux est terminé. INPUTREAM.LREAD (tampon) == 0 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) .


1 commentaires

InputStream bloquera si aucune donnée n'est disponible. Cela ne signifie pas ce que vous dites cela signifie.



11
votes

Les Javadocs pour introuvableam.read () dis:

Si la longueur de B est zéro, aucun octet n'est lu et 0 est renvoyé

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.)

plus loin, il y a:

retours: Le nombre total d'octets lus dans la mémoire tampon ou -1 s'il n'y a plus de données car la fin du flux a été atteinte.

Si vous souhaitez tester pour fin de fichier (ou flux réseau, ou autre), utilisez le test: xxx

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.


3 commentaires

...attends quoi? Voulez-vous dire écrire ! = -1 au lieu de ! = 0 dans votre dernier paragraphe?


@Ilmarikaronen Désolé, il est censé être -1 , 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?



2
votes

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 . Compte tenu de cette stipulation de base sur un tampon valide, on peut déduire de la DOCS que lue ne retournera jamais 0 .

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.


1 commentaires

Il va sans dire que la seule valeur de retour négatif possible est -1 .