在缓冲读卡器中检查线路末端的适当条件

时间:2014-02-24 23:39:02

标签: java java-io

在下面的代码中,我觉得while()条件可能不正确,因为我调用了readLine()方法两次,意味着没有从reader中验证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();
    }

2 个答案:

答案 0 :(得分:1)

你是对的。它应该是:

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

答案 1 :(得分:1)

您的代码正在调用readLine()两次,这是对的。它在评估while时调用它一次以查看条件是否为真。然后,如果是,则下一个语句再次调用它,这意味着前一行丢失。

如果EJP答案中的代码看起来太复杂或不够可读,这是另一种方式:

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