2013-07-27 13 views
6

FileWriterがバッファされているかどうかを知りたいです。 thisFileWriter vs BufferedWriter

はSOの質問、SO、それはないと思われる質問がthisでは、と思われます。(それが呼び出されるたびに書き込み(..)のためのシステムコールになります。

そこで、基本的。これら2つのQ & AIは少し混乱しています読んだことは明確にそれを説明することができ、誰です

おかげで、事前に

EDIT:?。私が引用していたのthis APIを読み込むことによって解決される問題関連部分:

write()メソッドの各呼び出しは に符号化変換器が与えられた文字(複数可)に呼び出される原因となります。結果のバイトは、基本出力の ストリームに書き込まれる前にバッファに蓄積された です。このバッファのサイズを指定することもできますが、デフォルトではほとんどの場合、十分に大きいサイズの です。 write()メソッドに渡される文字はバッファされないことに注意してください。

最高の効率を得るには、頻繁なコンバータ呼び出しを避けるために、OutputStreamWriterを BufferedWriter内にラップすることを検討してください。 の場合:

Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

FileWriterはOutputStreamWriterを継承しているので、それも同様に適用されます。

あなたの時間をありがとう、私は非常に具体的なものを尋ねたことを知っています。

答えて

0

FileWriterがバッファリングされていない、あなたはラッパーとしてBufferedWriterを使用する必要があります。

final int myBufferSize = 2048; 

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize); 
+0

デフォルトのバッファサイズはどうですか? – Rollerball

0

私はいつもBufferedWriterのを使用するrecomandます。実際のバッファサイズを制御することができます。使用するJVMに関係なくIOがバッファされ、IOパフォーマンスが大幅に向上します。

+0

しかし、FileWriterはバッファリングされますか?それはこの有名な標準バイトバッファしか持っていませんか?どのように機能するのですか?それを処理するJVMは? – Rollerball

+0

JDK 1.7コードの外観は、Writer BaseclassにwriteBufferを示していました。だから、すべての作家はこのバッファを持っています。 BufferedWriterは2番目のバッファprivate char cb []を使用します。これは、この隠されたバッファがすべてのJDKの実装に含まれないという結論につながります。 – morpheus05

+1

いいえ、書き込みメソッドはOutputStreamWriterでオーバーライドされます。 OutputStreamWriterで使用されるStreamEncoderでバッファリングが行われます。これは、文字をバイトにエンコードします。 –

関連する問題