2016-10-25 3 views
-2

Was macht die folgende readLine Methode? Es funktioniert in einem Proxy-Server, liest HTTP-Anfragen?Was bewirkt die folgende readLine-Methode?

private String readLine (InputStream in) { 
     StringBuffer line = new StringBuffer(""); 
     int c = 0; 

     try { 
      in.mark(1); 
      if (in.read() == -1) 
       return null; 
      else 
       in.reset(); 

      while ((c = in.read()) >= 0) { 
       if ((c == 0) || (c == 10) || (c == 13)) 
        break; 
       else 
        line.append((char)c); 
      } 

      if (c == 13) { 
       in.mark(1); 
       if (in.read() != 10) 
        in.reset(); 
      } 
     } catch (Exception e) {} 

     return line.toString(); 
    } 
+1

Was könnte eine Funktion namens 'readLine' * möglicherweise * tun ?! – JimmyB

+0

Ich habe, dass es die Zeile liest. Aber ich konnte nicht wirklich verstehen, wie es funktioniert. –

+0

Zum Beispiel entspricht char 13 "Rückkehr", wie ich weiß. Warum gibt es eine solche Aussage in diesem Code? if (c == 13) { in.mark (1); if (in.read()! = 10) in.reset(); } –

Antwort

0

Die readLine() Verfahren beginnt, indem das erste Zeichen aus dem zugeführten Eingangsstrommesswert (vor dem while loop).

Wenn dieses Zeichen einen numerischen Wert von -1 hat, wurde das Ende der Datei (EOF) erreicht, woraufhin die Methode null zurückgibt, um anzuzeigen, dass nichts aus dem Stream gelesen werden konnte. Andernfalls "setzt" er den Datenstrom aufgrund der in.mark(1)-Anweisung auf 1 Position (1 Byte) zurück, so dass das gelesene Zeichen "ungelesen" ist - dh damit es erneut gelesen werden kann, als Teil der while Schleife, die folgt, wo die Zeile tatsächlich gelesen wird.

Die while Schleife hält Zeichen zu lesen, bis EOF (daher der >=0 Vergleich) erreicht ist, oder bis ein "blank" (null, \n oder \r) Zeichen gelesen wird (die break Anweisung).

Solange kein "leeres" Zeichen gefunden wird, speichert die Schleife die gelesenen Zeichen in StringBuffer. Am Ende wird geprüft, ob das letzte gelesene Zeichen \r war. Wenn dies der Fall ist, liest es 1 weiteres Zeichen, um zu prüfen, ob es \n ist, da \r\n (CRLF) als "Newline" -Zeichen verwendet werden kann (z. B. in Windows). Wenn es nicht \n ist, dann "liest" es das Zeichen, das beim nächsten Aufruf der readLine()-Methode verwendet werden soll.

+0

Also, was macht das Programm, wenn es/r/n ist? –

+0

ich meine was ist die Wirkung dieses Teils: if (c == 13) { in.mark (1); if (in.read()! = 10) in.reset(); } –

+0

Die 13 ist '\ r'. Überprüfen Sie den letzten Absatz der Antwort. – PNS

Verwandte Themen