gpt4 book ai didi

java - 标准输入可用性(竞争条件?)

转载 作者:太空狗 更新时间:2023-10-29 11:17:38 25 4
gpt4 key购买 nike

我正在用 Java 编写一个命令行实用程序,它使用 System.in.available() 使用 stdin 或写入 stdout,具体取决于 stdin 上是否有可用数据:

public class MyUtility {
public static void main(String args[]) {
if(System.in.available() > 0)
consumeFromStdin();
else
produceToStdout();
}

// ...
}

我正在使用 System.in.available() 检查来避免使用命令行参数,使操作模式取决于它在 shell 中的使用方式(即, java MyUtility | 更多 对比 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 等)是否起作用?

最佳答案

进程间通信独立于 shell 而存在。标准输入和标准输出是 shell 使用但不创建的操作系统机制。不是 shell 的进程一直在使用它们。

我对 available() 方法的规范知之甚少,但是如果你在 Windows 上进行快速检查并且它可以工作,其余的操作系统大多是 UNIX 风格的,那么我认为它很有可能在任何地方都适用。

关于java - 标准输入可用性(竞争条件?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40972807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com