代码之家  ›  专栏  ›  技术社区  ›  gabriel119435

为什么异常日志用相同的代码更改打印位置?[复制]

  •  0
  • gabriel119435  · 技术社区  · 6 年前

    请考虑以下java代码:

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

    通过快速查看代码,我们中的一些人可能会认为 然而不是!它是10个a字符和10个B字符的随机出现。像这样:

    enter image description here

    为什么?有什么解决方案可以让As和Bs交替显示(ababababb…) 在我问这个问题之前,我检查了其他几个类似的问题,以解决我的案件和非工作!我带来了一些:

    0 回复  |  直到 4 年前
        1
  •  12
  •   Ankit    12 年前
    Why does this happen?
    

    这是因为 out err 是两个不同的输出流。但是,它们都是在控制台上打印的。所以你不认为它们是不同的溪流。而且,当你这么做的时候 out.println() ,不能保证在执行语句后立即在控制台上看到输出。相反,字符串通常(取决于系统)存储在输出缓冲区(如果愿意的话),系统稍后会处理该缓冲区,以便将缓冲区的输出显示在屏幕上。

    Solution :(
    

    尽管,作为 福阿德工程师 指出你可以用 setOut(System.err) setErr(System.out) 为了使它们有序化,我仍然不建议在实际将其放入应用程序时这样做(仅用于调试目的)。

        2
  •  5
  •   Eng.Fouad    12 年前

    他们是不同的 OutputStream s、 如果您确实需要保证打印顺序,请使用:

    System.setErr(System.out);
    

    System.setOut(System.err);
    
        3
  •  0
  •   Eng.Fouad    12 年前

    因为有两个独立的流,所以您给出的输出是可能的。