在将阅读器传递给某些外部函数之前,我需要检测Reader
是否为空(不会产生任何数据)。
我能想到的最好的办法是将Reader
包裹在BufferedReader
中,这保证提供mark
/ reset
功能,然后尝试读取一个字符,然后将流重置为其原始位置。
BufferedReader buffered = new BufferedReader(myReader);
if (!isEmpty(buffered)) {
someOtherFunction(buffered);
}
private boolean isEmpty(BufferedReader reader) throws IOException {
reader.mark(1);
int c = reader.read();
reader.reset();
return c < 0;
}
有更好的方法吗?
答案 0 :(得分:2)
使用ready()
检查流是否可以读取here docs
还建议在检查null
之前先进行ready()
检查
public boolean ready() throws IOException
告诉该流是否已准备好被读取。如果缓冲区不为空,或者基础字符流已准备好,则缓冲的字符流已准备就绪。
注意:
如果保证不阻止下一个read()输入,则为true,否则为false。请注意,返回false并不能保证下一次读取将被阻止。