1

これは次のようになります。

コンソールへの出力とファイルへの書き込み (速度)

2つの相反する答えがあるので、私は混乱しました。簡単なJavaプログラムを書いた

 for(int i=0; i<1000000; i++){
       System.out.println(i);
 }

で実行して、 stdout に出力するまでの時間を測定してから、と/usr/bin/time -v java testを試しました。コンソールへの書き込みは最も遅く (10 秒)、次にファイル (6 秒) で、最も高速 (2 秒) でした。なんで?/usr/bin/time -v java test > file/usr/bin/time -v java > /dev/null/dev/null

4

2 に答える 2

5

コンソールへの書き込みは、何かが書き込まれるたびに画面を更新する必要があるため、時間がかかります。

ファイルへの書き込みにはディスクにバイトを書き込む必要があります。これには時間がかかりますが、画面を更新するよりも時間がかかりません。

また、に書き込むと/dev/null、どこにも何も書き込まれません。これにより、時間が大幅に短縮されます。

于 2012-12-17T18:53:55.797 に答える
0

System.out.println のもう 1 つの問題は、デフォルトで System.out が autoflush モードになっていることです。println は実質的にバッファリングをオフにします。これを試して

    PrintWriter a = new PrintWriter(System.out, false);
    for (int i = 0; i < 1000000; i++) {
        a.println(i);
    }
    a.flush();

ファイルへの出力が 10 倍高速になることがわかります。

于 2012-12-17T19:20:36.310 に答える