从命令行读取的第二个方法调用因Java IO失败而失败:流已关闭

时间:2019-06-19 03:56:26

标签: java ioexception system.in

我有两个连续的调用,该方法使用BufferedReader上的InputStreamReader从键盘读取一行输入。这是两个电话-

    System.out.println("Enter size of array for hash table...");
    size = getInt();

    System.out.println("Enter initial number of items...");
    numInitial = getInt();

问题是-虽然第一个调用可以正常运行,但第二个调用失败,但有一个例外-

Enter size of array for hash table...
12
Enter initial number of items...
java.io.IOException: Stream closed
Exception in thread "main" java.lang.NumberFormatException: null
    at java.base/java.lang.Integer.parseInt(Integer.java:620)
    at java.base/java.lang.Integer.parseInt(Integer.java:776)
    at hashing.HashTableApp.getInt(HashTableApp.java:28)
    at hashing.HashTableApp.main(HashTableApp.java:48)

这些是我的方法定义-

public static String getString() {
    String s;
    try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
        s = br.readLine();
    }
    catch(IOException e) {
        s = null;
        System.out.println(e);
    }

    return s;   
}

public static int getInt() {
    String s = getString();
    return Integer.parseInt(s);
}

查看异常消息,看起来流在第一次调用getInt()之后关闭,然后在尝试从命令行读取时对getInt()的第二次调用失败。但是,我不确定为什么会这样。通常,当人们尝试从已经关闭的流中读取数据时,就会出现此问题,如先前in this question所述。

但是,就我而言,第一次调用关闭的流不会影响第二次调用,因为这是一个全新的方法调用。

在某些情况下,除了try-with-resources结构之外,这与我正在阅读的book中有关哈希的代码几乎相同。

0 个答案:

没有答案