2012-02-29 10 views
23

Java I/Oについて読んでいるうちに、私は標準出力に書き込むことができる方法が2つあることに気付きました。続きSystem.outとPrintWriterを使ってコンソールに書き込む

は技術

import java.io.*; 
public class ConsoleIO { 

    public static void main(String[] args) { 
     System.out.println("Method 1"); 

     PrintWriter writer = new PrintWriter(System.out); 
     writer.println("Method 2"); 
     writer.flush(); 
     writer.close(); 
    } 
} 

の両方を使用していますスニペットは、他の上の1つを使用して、任意のパフォーマンス上のメリットはありますでしょうか?

+2

実際にどんな技術を使用していても、コンソールに書き込むのは常に高価です。 – frewper

+0

私は、コンソールへの書き込みが高価であるというfrew​​perの主張について不思議でした。私はそれに気づいたことがあるが、なぜ*疑問に思った。その短さはI/Oバッファリングです。もっと長い(Python中心の)議論については、このスレッドでPiëtDelportの答えをチェックしてください:http://stackoverflow.com/questions/3857052/why-is-printing-to-stdout-so-slow-can-it-be-スピードアップ#3857543 – RegularlyScheduledProgramming

答えて

13

クイックグーグルは、有用だったCoderanchのスレッドを明らかにしました。

コンソール書き込みを行うには他にもいくつかの方法がありますが、書き込むようにコードを少なくして別の方法を使用しても、新しいPrintWriterオブジェクトを作成するとメモリが増えます。 PrintWriterのがちょうどコンソール以外のソースに書き込むことができます

のSystem.out.printlnのみをコンソールに出力しながら、それは例えばのHttpResponseに書き込むことができます。 2つのアプローチの異なる

2

2つの方法だけでなく、これを行う他の方法もあります。たとえば、ioパッケージのConsolクラスを使用していて、これに対していくつかのクラスが存在するかもしれません。

しかし、あなたがコンソールで何かを印刷したいのであれば、最初の方法が一番良いと思います。たった1行で行えるのであれば、なぜ4行から5行のコードに進むべきですか?

1

用途:

System.out.println("Method 1"); 

これは、他の選択肢よりも高速である静的な呼び出しです。さらに、2番目のオプションでPrinterWriterオブジェクトなどの追加オブジェクトを作成しないでください。

13

は次のとおりです。

  • あなたが実際にPrintStreamインスタンスを使用System.out.print("")使用する場合。
  • 実際に差がある二つのクラスPrintStreamPrintWriterである:PrintWrite文字のストリームである

    1. PrintStreamはバイトストリームです。 PrintWriterであなたはしかし、特定のエンコーディングでのOutputStreamWriterを渡すことができますが
    2. PrintStreamはプラットフォームのデフォルトのエンコーディングを使用しています。サンプルのため : PrintStream stream = new PrintStream(output); PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));

あなたはあなたの要件にアプローチを選択することができます。

1

PrintWriterを使用すると、UTF-8などのエンコーディングを指定できるため、出力を国際化することができます。 PrintWriterクラスとPrintStreamクラスは、プラットフォーム依存の行ブレークの処理と例外条件の呑み込みのために、ネットワーク出力ではなくコンソール出力のようなアクティビティにのみ使用してください。 「Java Network Programming」の第2章ではこれについてよく議論しています。

関連する問題