7

さまざまな io クラスの目的について本当に混乱しています。たとえば、BufferedWriter がある場合、なぜ PrintWriter が必要なのですか?

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;      
while(s=br.readline()!=null) {
      PrintWriter fs = new PrintWriter(new FileWriter(file));
      fs.println(s);
}

BufferedWriter が役に立たない場合は? これらの io クラスの違いがわかりません。誰か説明してもらえますか?

4

3 に答える 3

8

彼らはお互いに何の関係もありません。実は、一時的PrintWriterに変換する以外はめったに使用しません。System.outとにかく。

BufferedWriterBufferedReader/ BufferedInputStream/のように、単にメモリバッファ(サイズを指定できます)でBufferedOutputStream囲まれたものを装飾するか、デフォルトを受け入れます。Writerこれは、ネットワークやファイルベースのような遅いライターに書き込むときに非常に便利です。(たとえば、スタッフはメモリにコミットされ、ディスクにたまにしかコミットされません)メモリにバッファリングすることで、速度が大幅に向上しFileWriterますBufferedWriter

つまり、BufferedWriterです。いくつかの便利なメソッドを投入しますが、ほとんどの場合、このメモリバッファを提供するだけです。

PrintWriterほとんどは、、などのさまざまなタイプに特定の書き込みメソッドを追加する単純なデコレータであるStringためfloat、すべてをrawバイトに変換する必要はありません。

編集:

これはすでに出てきました

于 2011-04-23T18:20:53.473 に答える
4

これPrintWriterは本質的に便利なクラスです。1行のテキストをログファイルなどにすばやく簡単にブラストアウトしたい場合は、PrintWriterを使用すると非常に簡単になります。

3つの機能:

  • printandprintlnメソッドは任意のデータ型を取り、変換を行います。だけではありませんString
  • 比較的新しいformat方法は、金でその重量に見合う価値があります。これで、JavaでもCと同じくらい簡単に、Cスタイルのフォーマット制御で1行のテキストを出力できます。
  • メソッドが例外をスローすることはありません!一部のプログラマーは、問題が発生したことを聞いたことがない可能性に恐怖を感じています。しかし、それが使い捨てプログラムであるか、本当に単純なことをしているのであれば、便利さは素晴らしいかもしれません。特に、出力が間違っている、System.outまたはSystem.errうまくいかない方法がほとんどない場合。
于 2011-04-23T18:22:34.563 に答える