在我的代码中,我必须从控制台读取用户输入:
class Demo {
//...some code
public String readUserInput() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String userInput = reader.readLine();
reader.close();
return userInput;
}
}
第一次在Demo对象上使用方法readUserInput()
时,一切正常。但是当我创建另一个Demo对象并调用方法时 - 它会抛出带有消息
“Stream closed”
任何人都可以告诉我,为什么我在不同的不同对象上有异常?谢谢你的关注。
答案 0 :(得分:4)
问题在于:
new InputStreamReader(System.in)
当您关闭BufferedReader时,它会关闭InputStreamReader,而InputStreamReader又会关闭System.in。
contract of Closeable
's .close()
中解释了所有(有点),其中说:
关闭此流并释放与其关联的所有系统资源。
因此,您第二次尝试阅读BufferedReader
时,最终会导致数据从System.in
读取,但不可用。因此你的错误。
更一般地说,您处理的资源很差。请阅读并学习使用try-with-resources语句。
答案 1 :(得分:0)
您正在关闭阅读器,关闭... System.in
在这种情况下,您不必关闭Stream。