0

私はEclipse IDEを使用していますが、コードによっては、System.outの出力よりもSystem.errの出力が先に出力されることがあります。例えば:

    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

stderrstdoutは 2 つの異なるストリームであり、通常はフラッシュ時に出力されます。バッファリングが発生すると予想され、これはフラッシュに影響します。したがって、各ストリームのデータ量は、フラッシュと出力に影響します。

于 2011-09-14T14:55:37.283 に答える
1

一部の OS (特に *nix) では、標準出力ストリームがバッファリングされます。つまり、送信されたものは、端末/画面に送信される前に少し待機する可能性があります。ただし、標準エラーは多くの場合、バッファリングされないか、出力ごとに自動フラッシュされます。

System.outSystem.errは、これら 2 つのストリームを表す Java のオブジェクトにすぎないため、ホスト プラットフォームでの動作と同じように動作する傾向があります。しかし、私は彼らがしなければならないと具体的に言っていることを知りません。

于 2011-09-14T15:00:59.323 に答える
0

これらは、それぞれ独自のバッファーを持つ個別のストリームです。ストリームに書き込み、それが「コピー」またはコンソールに書き出されます。

あなたはその呼び出しを見つける必要があります

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

ストリームを実際のデバイス (Eclipse コンソール) にフラッシュし、ある程度の秩序をもたらします。

于 2011-09-14T14:57:54.680 に答える