0

我正在使用 Eclipse IDE,有时,根据代码,System.err 输出比 System.out 更早打印。例如:

    public static void main(String[] args) {    
        System.out.println("Regular text"); //1
        System.err.println("Error text"); //2           
    }

使用该代码,一切都很好。2 在 1 之后打印。但是,添加一些额外的 system.out 语句会颠倒顺序:

    public static void main(String[] args) {    
        System.out.println("Regular text"); //1
        System.err.println("Error text"); //2

        //Additional printing stuff
        for(String s = "a";s.length() < 200; s = s.concat("" + (char)(s.charAt(s.length()-1)+ 1))){
            System.out.println(s);
        }

    }

1 在 2 之后打印。

这怎么可能?

4

3 回答 3

2

stderr并且stdout是 2 个不同的流,通常会在刷新时打印。我希望会发生一些缓冲,这会影响冲洗。因此,每个流中的数据量将影响刷新和输出。

于 2011-09-14T14:55:37.283 回答
1

在某些操作系统(特别是*nix)上,标准输出流是缓冲的——也就是说,发送给它的任何东西在被发送到终端/屏幕之前可能会停留一段时间。然而,标准错误通常不会被缓冲,或者在每次输出后自动刷新。

System.out并且System.err只是表示这两个流的 Java 对象,因此,它们的行为往往与它们在主机平台上的行为相同。但我不知道有什么特别说他们必须这样做。

于 2011-09-14T15:00:59.323 回答
0

它们是独立的流,每个流都有自己的缓冲区。您写入一个流,然后将其“复制”或写出到控制台。

你应该发现调用

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

会将流刷新到实际设备(Eclipse 控制台)并带来一些秩序。

于 2011-09-14T14:57:54.680 回答