BufferedReader.ready() 方法是否确保 readLine() 方法不返回 NULL?
我有这样的代码来读取文本文件使用:BufferedReader
BufferedReader reader=null;
try {
reader = new BufferedReader(new FileReader("file1.txt"));
while (reader.ready()) {
final String line = reader.readLine();
System.out.println("<"+line+">");
} catch (..)
{
...
}
它工作正常,但Findbugs报告警告:
NP_DEREFERENCE_OF_READLINE_VALUE:取消引用调用 readLine() 的结果,而不检查结果是否为 null。如果没有更多要读取的文本行,readLine() 将返回 null 并取消引用,这将生成 null 指针异常。
当我更改为 时,即FileReader
StringReader
BufferedReader reader=null;
try {
reader = new BufferedReader(new StringReader("ABCD"));
while (reader.ready()) {
final String line = reader.readLine();
System.out.println("<"+line+">");
} catch (..)
{
...
}
方法返回,而方法总是返回 - 实际上这是一个无限循环。readLine
null
ready
true
这似乎即使返回也可能返回。但是,为什么不同的行为因不同的而有所不同呢?readLine
null
ready
true
Reader
更新:
我确实知道读取文本文件的正常方式(就像彼得和阿里插图一样)。但是我从同事那里读到了那段代码,并意识到我不知道方法。然后我读了JavaDoc,但不明白。然后我做了一个测试并发布了这个问题。因此,提出这个问题的更好方法可能是:ready
block
输入何时会阻塞?如何使用该方法(或为什么不使用它)?为什么这2 s(和)在方法上的行为不同?ready
Reader
FileReader
StringReader
ready