У меня есть два последовательных вызова метода, который использует 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()
при попытке чтения из командной строки. Однако я не уверен, почему это происходит. Обычно эта проблема возникает, когда кто-то пытается прочитать из потока, который уже закрыт, как описано ранее в этом вопросе .
Однако в моем случае закрытие потока после первого вызова не должно влиять на второй, потому что это совершенно новый вызов метода.
Для некоторого контекста это в значительной степени тот же код из книги Я читаю о хешировании, за исключением структуры try-with-resources.