Pour quoi la méthode read() retourne -1 ?

Résolu/Fermé
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014 - 22 août 2013 à 16:05
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014 - 22 août 2013 à 21:04
Bonjour,

 public abstract int read () throws IOException


Cette méthode lit un octet sur le flot spécifié et retourne cette valeur sous la forme d'un entier. Il s'agit d'une lecture bloquante. Si la valeur retournée est -1, cela indique que l'on atteint la fin normale du flot.
Pour quoi cette méthode retourne un -1?

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 22/08/2013 à 19:05
Il faudrait savoir exactement d'où vient cette méthode read, dans tous les cas il faut se référer à la documentation. Par exemple InputStream.read()

En général quand -1 est la valeur spécifiant la fin de flux c'est soit parce que dans les autres cas ça renvoie un octet (valeur entre 0 et 255), soit parce que ça renvoie le nombre d'octets lus (dans le cas où on passe un tableau en paramètre)
La confiance n'exclut pas le contrôle
0
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014
22 août 2013 à 19:44
le (-1) est ce que c la suite d'une chaîne comme (0,1,2,3,4,5...) ou bien c automatique , quand c la fin d'une chaîne il renvoie le -1 ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 août 2013 à 20:03
Au risque de me répéter cela dépend du contexte. En l'occurrence la méthode read() que tu nous indique est abstraite, c'est à dire qu'il n'y a pas de code derrière. C'est aux classes qui implémenteront cette méthode de décider à quoi cela correspond.
Sans savoir quel contexte exact il y a derrière, la seule indication que nous donne -1 c'est que le traitement est terminé et qu'il faut arrêter de faire des read.
Par exemple pour la lecture d'un fichier, on aura -1 quand on a atteint la fin du fichier, mais si on lit du texte au clavier on n'aura jamais -1, chaque situation est différente.
0
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014
22 août 2013 à 20:28
quand on écrit par exemple

try{
while((byteLu=fis.read())!=-1){  
System.out.println(byteLu);
}
}


et une autre question qu'est ce que tu veux dire par une lecture du texte au clavier ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 22/08/2013 à 20:39
Et bien par exemple je reprend ton code, et je donne à "fis" la valeur System.in

int byteLu;
InputStream fis = System.in;

try
{
    while((byteLu=fis.read())!=-1)
        System.out.println(byteLu);
}
catch (IOException e)
{
     e.printStackTrace();
}

Sauf qu'ici il n'y aura jamais de fin (à part créer une IOException sur le clavier, mais faut le vouloir)
0
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014
22 août 2013 à 20:51
dans mon code fis est de type FileInputStream .
et ton code ne donne aucun résultat !
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 août 2013 à 20:58
"ton code ne donne aucun résultat !"

Mon code, c'est le tien, et il fonctionne ! Mais puisqu'il lit le clavier, il faut que tu tapes un texte sur ton clavier et que tu appuies sur entrée pour que cela fasse quelque chose...

"dans mon code fis est de type FileInputStream "
Dans ce cas, rapporte toi à la documentation de FileInputStream.read() :

Returns:
    the next byte of data, or -1 if the end of the file is reached.
0