使用新的BufferedReader“java.io.IOException:Stream closed”
许多人问这样的问题,但这个问题有点不同。 这是代码:
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
也必须是新的。 或不?
如果没有,我应该如何组织我的程序,以便在所有调用和程序结束后关闭读者?
因为System.in
是同一个Object
( public final static InputStream in;
of System
类)两个方法调用都在使用,在一个方法中关闭会自动关闭System.in
以获取其他方法。 一旦你完成调用readString
,你应该从外面关闭BufferedReader
( 因为我可以看到它是public
),因此它最终会关闭底层的System.in
。
关闭BufferedReader
关闭System.in
。 您根本不应该关闭它,也不应该继续创建一个新的:您将丢失数据。 在整个过程中使用相同的一个。