java - System.out.println 和 System.err.println 乱序

标签 java console system

我的 System.out.println()System.err.println() 调用没有按照我发出的顺序打印到控制台。

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println("out");
        System.err.println("err");
    }
}

这会产生:

out
out
out
out
out
err
err
err
err
err

而不是交替使用outerr。这是为什么?

最佳答案

它们是不同的流,并且在不同的时间刷新。

如果你放

System.out.flush();
System.err.flush();

在你的循环中,它将按预期工作。

为了澄清,输出流被缓存,因此所有写入都会进入该内存缓冲区。经过一段时间的沉寂,它们居然被写出来了。

您写入两个缓冲区,然后在一段时间不活动后,它们都会被刷新(一个接一个)。

关于java - System.out.println 和 System.err.println 乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797917/

相关文章:

linux - 通过控制台使用自定义调色板将图像转换为索引颜色

system - 我应该使用什么元素类型在 SysML 中对消息及其数据元素进行建模?

c - C语言中ls命令的实现

java - 我的返回 Optional 的方法不能以类似功能的方式使用

java - 这个 SQL 语句可以在 JPQL + 指南中使用吗?

java - JasperReports Virtualizer 即使在 20 分钟后也不会生成报告

javascript - 在 JavaScript IF 子句中执行 Shell 脚本

linux - 如何递归地将文件从文件夹发送到 linux 控制台中的命令?

java - 在两种方法中使用 TextFields 而不声明通用

java - System.getenv 仍然会在 MacOS Mojave 上获取已删除的 env 变量值 - Java