首页 > 解决方案 > 检查阅读器是否为空的最佳方法是什么?

问题描述

在将阅读器传递给某个外部函数之前,我需要检测 aReader是否为空(不会产生任何数据)。

我能想到的最好的办法是将我的 a 包装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;
}

有没有更好的办法?

标签: javabufferedreaderis-empty

解决方案


用于ready()检查流是否可以阅读此处文档

并且还建议null检查前检查ready()

public boolean ready() throws IOException

告诉这个流是否准备好被读取。如果缓冲区不为空,或者底层字符流已准备好,则缓冲字符流已准备好。

笔记 :

如果保证下一个 read() 不会阻塞输入,则为 true,否则为 false。请注意,返回 false 并不能保证下一次读取将阻塞。


推荐阅读