我正在使用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。
这怎么可能?
答案 0 :(得分:2)
stderr
和stdout
是两个不同的流,通常在刷新时打印。我希望会发生一些缓冲,这会影响潮红。因此,每个流中的数据量将影响刷新和输出。
答案 1 :(得分:1)
在某些操作系统(特别是* nix)上,标准输出流被缓冲 - 也就是说,发送给它的任何内容在发送到终端/屏幕之前可能会稍微放置一些。但是,标准错误通常是不缓冲,或者在每次输出后自动刷新。
System.out
和System.err
只是Java的对象来表示这两个流,因此,它们的行为往往与主机平台上的行为一样。但我不知道他们必须具体说明什么。
答案 2 :(得分:0)
它们是独立的流,每个流都有自己的缓冲区。您可以写入一个流,然后将其“复制”或写入控制台。
您应该找到调用
System.out.flush()
System.err.flush()
会将流刷新到实际设备(Eclipse控制台)并带来一些相似的命令。