许多人都这样问过这个问题,但这个问题有点不同。这是代码:
public static BufferedReader reader;
public static String readString() throws IOException {
reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
reader.close();
return s;
}
虽然多次调用程序运行时readString
方法。第二个电话会导致exception: stream closed
。我无法理解:为什么它最终如此?每当我们宣布新BufferedReader
时。所以stream
也必须是新的。或者不是?
如果没有,我应该如何组织我的程序,以便在所有调用之后和程序结束后关闭读者?
答案 0 :(得分:3)
由于System.in
与Object
类的{{1>} public final static InputStream in;
相同,因此两个方法调用正在使用,关闭一种方法将自动关闭System
其他方法。一旦你完成调用{{1},你应该从外面(,因为我可以看到它System.in
)关闭BufferedReader
方法所以它最终将关闭基础public
。
答案 1 :(得分:1)
关闭BufferedReader
关闭System.in
。你根本不应该关闭它,你不应该继续创建一个新的:你将丢失数据。在整个过程中使用相同的一个。