2016-10-25 60 views
-2

以下readLine方法有什麼作用?它在代理服務器中工作,讀取HTTP請求?以下readLine方法有什麼作用?

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

什麼可以名爲'readLine' *可能*做的功能?! – JimmyB

+0

我知道它讀取的行。但我實際上無法理解它是如何工作的。 –

+0

例如,我知道char 13對應於「return」。 爲什麼在這段代碼中有這樣的陳述? if(c == 13) in.mark(1); if(c == 13) in.mark(1); if(in.read()!= 10) in.reset(); } –

回答

0

readLine()方法開始通過讀取所提供的輸入數據流的第一個字符(在while循環之前)。

如果該字符的數值爲-1,則已達到文件結束(EOF),於是該方法返回null,表示無法從流中讀取任何內容。否則,由於in.mark(1)語句的原因,它會將流重置爲1個位置(1個字節),以便讀取字符爲「未讀」 - 即可以再次讀取該字符,作爲while的一部分循環,這是實際讀取行的地方。

while循環不斷,直到達到EOF(因此>=0比較)讀取字符,或者直到「空白」(null\n\r)字符被讀取(在break語句)。

只要沒有遇到「空白」字符,循環就會將讀取的字符放在StringBuffer中。最後,它檢查最後讀取的字符是否爲\r。如果是,則讀取另外1個字符以檢查它是否爲\n,因爲\r\n(CRLF)可用作「換行符」字符(例如,在Windows中)。如果它不是\n,則它將「未讀」該字符,以用於下一次調用readLine()方法。

+0

那麼,如果它是/ r/n,程序會做什麼? –

+0

我的意思是這部分的效果是什麼:if(c == 13) in.mark(1); if(in.read()!= 10) in.reset(); } –

+0

13是'\ r'。檢查答案的最後一段。 – PNS

相關問題