【发布时间】:2012-04-25 16:25:41
【问题描述】:
我正在使用下面的代码在命令行从标准输入读取一条 sql 语句:
BufferedReader in = null;
StringBuilder sb = new StringBuilder();
String line = null;
try {
in = new BufferedReader(new InputStreamReader(System.in));
while((line = in.readLine()) != null) {
sb.append(line);
}
} finally {
if (in!=null) in.close();
}
我的问题是应用程序有时需要使用来自标准输入的数据运行,有时则不需要(无管道输入)。如果上述代码中没有输入,in.readLine() 会阻塞。有没有办法重写这段代码,以便在没有任何输入的情况下仍然可以运行?
更新:该应用程序旨在从命令行而不是键盘接收管道数据。
【问题讨论】:
-
Stdin 代表控制台。您如何知道用户是否要输入内容?
-
谢谢彼得 - 更新了问题以澄清。
-
在这种情况下 in.readLine() 只会在等待来自文件系统的数据时阻塞。这应该很短(大约 10 毫秒)我你的文件系统很慢,这似乎大部分时间都在阻塞,尽管实际上它正在处理一些数据并反复等待磁盘。