J'utilisais StringReader dans une affectation Structures de données (codes Huffman), et je testais si la fin de la chaîne avait été atteinte. J'ai trouvé que la valeur int que StringReader.read() renvoie n'est pas -1, mais 65535, donc la conversion du résultat en un octet a résolu mon problème de boucle infinie que j'avais.Pourquoi StringReader.Read() ne renvoie pas un octet?
Est-ce un bogue dans JDK, ou est-ce une pratique courante de transtyper les valeurs renvoyées par les appels Reader.read() en bytes? Ou est-ce que je manque quelque chose?
L'essentiel de mon code était quelque chose comme ceci:
StringReader sr = new StringReader("This is a test string");
char c;
do {
c = sr.read();
//} while (c != -1); //<--Broken
} while ((byte)c != -1); //<--Works
'char c = (char) -1; System.out.println (c! = - 1); 'compile pour moi –
Si vous avez une variable' char c' (comme le fait l'OP), alors 'c = sr.read();' (comme l'OP aussi a) ne compilera pas. – aioobe
Le problème de largeur de chaîne a du sens, j'ai dû changer le cas de base de ma méthode récursive, et je viens de tester sans lancer à (octet) et tout va bien à nouveau> _ <. Voici maintenant une opportunité d'en apprendre plus. . . –