我正在通过Java IO。刚开始使用标准输入和输出流。请看下面给出的简单程序,
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
System.out.println("Give us your input");
String str = scanner.nextLine();
System.out.println("Standard Output: " + str);
System.err.println("Standard Error Output: " +str );
}
运行两次或三次时,输出会有所不同。请在下面找到几个输出,
首次运行:
给我们您的意见
我的名字
标准错误输出:我的名字
标准输出:我的名字
流程结束,退出代码为0
使用相同的代码第二次运行:
给我们您的意见
我的名字
标准输出:我的名字
标准错误输出:我的名字
流程结束,退出代码为0
我想知道为什么输出随System.err更改
最佳答案
System.out和System.err写入通过不同管道连接到命令外壳程序的不同流。然后,命令外壳将从这些管道读取并将数据写入控制台应用程序。这最终将写入屏幕。
在许多地方,写入一个流的数据可能会“超载”写入另一数据流的数据。
由于Java规范不能保证首先写入哪个流,因此它可能在JVM本身中发生。 (实际上,如果只有一个线程来编写,则不太可能。使用当前的Java实现,该行为可能是确定性的……尽管未指定。)
由于无法保证写入两个独立管道的数据的传递顺序,因此这可能在OS中发生。
这可能在shell中发生,因为shell规范中没有任何内容优先考虑从管道读取数据。
简而言之,在许多领域中,行为没有指定。
还值得注意的是,观察到的行为可能取决于您使用的Java版本,操作系统和操作系统工具,您的硬件以及系统上的负载。
最后,您可能无法采取任何措施来保证观察到的交错(或不一致)是一致的。如果需要一致性,请将输出写入一个或另一个流中。
关于java - 我想知道System.err的工作方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40626347/