私は標準入力を消費したりSystem.in.available()
を使用してSTDIN上の利用可能なデータがあるかどうかに応じて、標準出力に書き出しどちらかというJavaでコマンドラインユーティリティを書いている:STDIN入力可用性(競合状態?)
public class MyUtility {
public static void main(String args[]) {
if(System.in.available() > 0)
consumeFromStdin();
else
produceToStdout();
}
// ...
}
私はSystem.in.available()
チェックを使用して、コマンドラインパラメータを使用しないようにして、動作モードをシェルでどのように使用するか(つまり、java MyUtility | more
対echo testing | java MyUtility
)にします。
これまでのところ、これはMacのコマンドラインからうまく機能しています。 stdinの可用性は、常にSystem.in.available()
が呼び出されるまでに存在していました。私の質問はされています、
java MyUtility < input.txt
System.in.available()
とユーティリティを呼び出す場合でも、ここに0を返すことがそれは可能だろうか?
もちろん、私はこれをすべてのJVM実装、シェル、およびOSで動作させたいと思います。 Windows、Mac、およびLinuxは、プロセスが生成されるまでに、標準のデータ可用性に対して異なる(何か)保証を提供しますか?そして、たとえOSがデータの可用性を保証しても、JVMはこのデータを保証するために何らかの発言をしていますか?シェル(つまり、ksh、csh、PowerShellなど)は役割を果たしますか?