2014-02-24 39 views
0

在下面的代碼中,我覺得while()條件可能不正確,因爲我調用readLine()方法兩次,意味着不驗證我的if()中的firstLine字符串,來自讀者的條件。適當的條件來檢查緩衝讀取器中的行結尾

什麼是驗證緩衝讀取器(br)是否尚未達到行尾的正確方法。

try { 
    if (is != null) { 
     br = new BufferedReader(new InputStreamReader(is)); 
     os.write("x ample.abcd.com\r\n\r\n".getBytes()); 
     if (br != null) { 
      while (br.readLine() != null) { 
       String returnString = br.readLine(); 
       if (returnString.contains("250")) { 
        logger.debug(" string:" + returnString); 
        break; 
       } 
      } 
     } 
    } 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} finally { 
    try { 
     if (br != null) 
      br.close(); 
     if (sockt != null) 
      sockt.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

回答

1

你是對的。它應該是:

String line; 
while ((line = br.readLine()) != null) 
{ 
    // ... 
} 
+0

手段,我們不需要再次調用br.readLine()?在內部的同時,它將已經讀取該行並將其分配給行變量? – mahesh

+1

這是正確的。 – EJP

+0

我改變了正確的答案的原因是,當(真正的)將要無限循環時,你在所有情況下完美地工作。 – mahesh

1

你是對的,你的代碼調用readLine()兩次。它在評估while以查看條件是否爲真時調用它。然後,如果它是真的,則下一個語句再次調用它,這意味着前一行丟失。

如果EJP的答案代碼看起來太複雜或無法讀取的是,這裏的另一種方式:

while (true) { 
    String resultString = br.readLine(); 
    if (resultString == null) 
     break; 
    // ... the rest of the loop 
} 
+0

看起來不錯,謝謝,我會盡力接受它 – mahesh