我用Java編寫的命令行實用程序,要麼消耗標準輸入或輸出到stdout取決於是否使用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()
時,stdin的可用性一直存在。我的問題是:會不會是可能的,調用帶有
java MyUtility < input.txt
System.in.available()
實用程序,即使在這裏可能會返回0?
當然,我想這對所有的JVM實現,貝殼,和操作系統工作。 Windows,Mac和Linux在生成進程時,是否提供對stdin數據可用性的不同(任何?)保證?而且,即使操作系統保證數據可用性,JVM是否也有保證這些數據的發言權? shell(即ksh,csh,PowerShell等)是否起作用?