Сроки проблемы с PrintStreams - PullRequest
       12

Сроки проблемы с PrintStreams

0 голосов
/ 14 сентября 2011

Я использую 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.

Как это возможно?

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

stderr и stdout - это 2 разных потока, которые обычно печатаются при очистке. Я ожидаю, что произойдет некоторая буферизация, и это повлияет на промывку. Следовательно, количество данных в каждом потоке будет влиять на сброс и вывод.

1 голос
/ 14 сентября 2011

В некоторых операционных системах (в частности, * nix) стандартный поток вывода буферизуется, то есть все, что ему отправляют, может немного подождать перед отправкой на терминал / экран.Однако стандартная ошибка часто не буферизируется или автоматически очищается после каждого вывода.

System.out и System.err являются просто объектами Java для представления этих двух потоков, и, таким образом,, как правило, ведут себя так же, как на платформе хоста.Но я не знаю ничего, что конкретно говорит, что они должны.

0 голосов
/ 14 сентября 2011

Это отдельные потоки, каждый со своими буферами.Вы пишете в поток, который затем «копируется» или записывается на консоль.

Вы должны обнаружить, что вызов

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

сбрасывает потоки на фактическое устройство (консоль Eclipse) и внести некоторое подобие порядка.

...