2015-04-12 1 views
0

Je ne comprends pas vraiment ce que fait ce morceau de code. Je veux surtout savoir ce que les processus isr.read(inputBuffer) et ce que fait la boucle while. Quelqu'un pourrait-il m'expliquer pour moi? Merci.inputstreamreader.read et string.copyvalueof

InputStreamReader isr = new InputStreamReader(is); 
int charRead; 
char[] inputBuffer = new char[BUFFER_SIZE]; 
try { 
    while((charRead = isr.read(inputBuffer)) > 0) { 
     String readString = String.copyValueOf(inputBuffer, 0, charRead); 
     XMLContents += readString; 
     inputBuffer = new char[BUFFER_SIZE]; 
    } 

    return XMLContents; 
} catch(IOException e) { 
    e.printStackTrace(); 
    return null; 
} 
+0

La méthode 'read()' qui est utilisée ici, lit les octets et les stocke les caractères dans le tableau donné. La méthode renvoie le "Nombre de caractères lus, ou -1 si la fin du flux a été atteinte" (citation vom javadoc). De cette façon, la boucle continue tant qu'il y a quelque chose de plus à lire. – Ria

Répondre

2

Fondamentalement, le isr.read(inputBuffer), lit à partir du inputstreamreader, stocke les caractères dans la mémoire tampon de taille fixe donnée (inputBuffer), et renvoie le nombre de caractères lues. La clause while while((charRead = isr.read(inputBuffer)) > 0) fait exactement ce qui est expliqué ci-dessus, et après que la valeur des caractères lus soit stockée, elle vérifie si elle est supérieure à 0 ... Si oui, cela signifie que nous avons lu quelque chose dans le flux et que nous entrons la boucle. Le String.copyValueOf(inputBuffer, 0, charRead); est utilisé pour copier le contenu du tampon dans un objet chaîne - readString. Après cela, ce dernier objet de chaîne est attaché à l'objet XMLContents. A la fin, un nouvel objet tableau de tampons est créé et affecté au inputBuffer, et le processus est répété.

En l'absence de caractères sont lus, sir.read(inputBuffer) retours 0 et la valeur de charRead est 0 (pas plus de 0). La boucle while est terminée et l'objet XMLContents est renvoyé.

+0

Notez que 'inputBuffer = new char [BUFFER_SIZE];' est complètement inutile et n'est qu'une perte de temps. La gestion des exceptions de la méthode est également horrible. –