PrintStreams的计时问题

时间:2011-09-14 14:52:03

标签: java eclipse printstream

我正在使用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之后打印。但是,添加一些额外的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);
        }

    }
2后打印

1。

这怎么可能?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在某些操作系统(特别是* nix)上,标准输出流被缓冲 - 也就是说,发送给它的任何内容在发送到终端/屏幕之前可能会稍微放置一些。但是,标准错误通常是缓冲,或者在每次输出后自动刷新。

System.outSystem.err只是Java的对象来表示这两个流,因此,它们的行为往往与主机平台上的行为一样。但我不知道他们必须具体说明什么。

答案 2 :(得分:0)

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

您应该找到调用

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

会将流刷新到实际设备(Eclipse控制台)并带来一些相似的命令。