"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是相同的Objectpublic 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。你根本不应该关闭它,也不应该继续创建一个新的:你会丢失数据。在整个过程中使用同一个。