通过限制读取的数据量从缓冲读取器读取

时间:2014-03-11 06:15:38

标签: java escaping

我在应用程序中看到以下代码,通过限制读取的数据量来读取缓冲读取器。

public static String readBuffer(Reader reader, int limit) throws IOException 
{           
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < limit; i++) {
        int c = reader.read();
            if (c == -1) {
                return ((sb.length() > 0) ? sb.toString() : null);
            }
        if (((char) c == '\n') || ((char) c == '\r')) {
            break;
    }
        sb.append((char) c);
}
    return sb.toString();
}

有人可以向我解释代码中的这些行是什么意思吗?我们为什么需要它?

if (((char) c == '\n') || ((char) c == '\r')) {
            break;
    }

2 个答案:

答案 0 :(得分:2)

\n - New Line
\r - Return (Enter)
\n \r \f \t \v     Newline, carriage return, form feed, tab, vertical tab

参考herehere

答案 1 :(得分:1)

他们的意思是:如果c是换行符(\n)或回车符(\r),则跳出循环。 (可以找到Java中的转义序列列表here,或者如果您更喜欢更正式的JLS section 3.10.6。)

更上一层楼;这意味着此方法将处理数据,直到a)命中行结束,或b)达到限制(循环中i < limit条件),以先发生者为准。

至于为什么你需要它:那是因为大概是,该方法的一个设计要求是让它停在一个行尾,而if语句是实施要求的方式。