【发布时间】:2017-04-19 18:15:24
【问题描述】:
我正在用 Java 编写一个命令行实用程序,它使用标准输入或写入标准输出,具体取决于标准输入上是否有可用的数据,使用 System.in.available():
public class MyUtility {
public static void main(String args[]) {
if(System.in.available() > 0)
consumeFromStdin();
else
produceToStdout();
}
// ...
}
我使用System.in.available() 检查来避免使用命令行参数,以使操作模式取决于它在shell 中的使用方式(即java MyUtility | more 与echo testing | java MyUtility)。
到目前为止,这在 Mac 命令行中运行良好;在调用System.in.available() 时,标准输入的可用性一直存在。我的问题是:有没有可能,即使在调用该实用程序时使用
java MyUtility < input.txt
System.in.available()这里可能返回0?
当然,我希望它适用于所有 JVM 实现、shell 和操作系统。 Windows、Mac 和 Linux 在生成进程时是否提供不同的(任何?)标准输入数据可用性保证?而且,即使操作系统保证了数据的可用性,JVM 对保证这些数据也有任何发言权吗? shell(即 ksh、csh、PowerShell 等)是否起作用?
【问题讨论】:
标签: java linux bash shell operating-system