"java.io.IOException: Stream closed" 使用新的 BufferedReader
"java.io.IOException: Stream closed" with new BufferedReader
很多人问过这样的问题,但这个问题有点不同。这是代码:
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
也必须是新的。还是不行?
如果不是,我应该如何组织我的程序,以便在所有调用和我的程序结束后关闭 reader?
因为System.in
是相同的Object
(public final static InputStream in;
of System
class)两种方法calls 正在使用,关闭一个方法会自动关闭 System.in
另一个方法。你应该从 outside(as I can see it's public
) 关闭 BufferedReader
一旦你完成调用 readString
所以它最终将关闭基础 System.in
.
关闭 BufferedReader
即关闭 System.in
。你根本不应该关闭它,也不应该继续创建一个新的:你会丢失数据。在整个过程中使用同一个。
很多人问过这样的问题,但这个问题有点不同。这是代码:
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
也必须是新的。还是不行?
如果不是,我应该如何组织我的程序,以便在所有调用和我的程序结束后关闭 reader?
因为System.in
是相同的Object
(public final static InputStream in;
of System
class)两种方法calls 正在使用,关闭一个方法会自动关闭 System.in
另一个方法。你应该从 outside(as I can see it's public
) 关闭 BufferedReader
一旦你完成调用 readString
所以它最终将关闭基础 System.in
.
关闭 BufferedReader
即关闭 System.in
。你根本不应该关闭它,也不应该继续创建一个新的:你会丢失数据。在整个过程中使用同一个。