java - 从命令行读取的第二种方法调用失败并出现 java IO 异常:流已关闭
问题描述
我连续两次调用一个方法,该方法使用 aBufferedReader
来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);
}
查看异常消息,看起来 Stream 在第一次调用后关闭getInt()
,然后在getInt()
尝试从命令行读取时第二次调用失败。但是,我不确定为什么会发生这种情况。通常,当尝试从已关闭的流中读取时会出现此问题,如本问题前面所述。
但是,就我而言,第一次调用关闭的流不应该影响第二次调用,因为它是一个全新的方法调用。
在某些情况下,这与我正在阅读的关于散列的书中的代码几乎相同,除了 try-with-resources 结构。
解决方案
推荐阅读
- python - 如何从类中返回特定结果
- php - 如何在命名空间 App\Controller 中声明一个新函数?
- selenium - 我正在尝试在不同的类中但在同一个浏览器实例中执行多个测试用例
- inno-setup - 自定义页面 Values[] 数组在 Inno Setup 中如何工作?
- ios - 当我从 callKit 结束通话时,通话不会结束,我可以看到绿色的状态栏
- javascript - Javascript 俄罗斯方块 moveRight 问题(Ania Kubow/FCC 教程)
- mysql - 我们可以将任何类型的媒体发布到 mysql 吗?
- angular - 最好的媒体类型,通过服务器发送事件到 Angular/RxJs/observer 时尽快返回 Flux
- javascript - 如何将节点集群模式与议程 cronjobs 一起使用
- c++ - 我的 C++ 程序只写入文本文件的最后一个条目