2012-02-14 5 views
1

write(byte [] b)メソッドを使用してBufferedOutputStreamに書き込むと、FilterOutputStreamからのwriteメソッドが使用されます。ドキュメントは言う:BufferedOutputStreamに(byte [] b)を書き込むとどうなりますか? (Java)

は「FilterOutputStreamのwriteメソッドは、引数b、0、およびb.lengthで三個の引数のそのwriteメソッドを呼び出します。」それが参照している3つの引数を指定してメソッドを書く

は? FilterOutputStreamのものか、BufferedOutputStreamのものか(すなわち、実際にバッファされた書き込みであるか?)。

私はそれが信じていますが、わかりません。

+0

*その*書き込みメソッド。それ自身。これは完全にはっきりしています。ダウン投票。 – EJP

+0

それは持っていないので「完全にはっきり」ではありません。 :)しかし、はい、最終的には、BufferedOutputStreamの上書きされたメソッドで終了します(簡単にeclipseでチェックするだけで、Ctrlキーを押しながらメソッドを2回クリックします)。 – eckes

答えて

1

BufferedOutputStreamオーバーライドwrite(byte[], int, int)メソッドであるため、新しいオーバーライドが呼び出されます。はい、書き込みはバッファされます。

1

答えははいといいえです。私の発見を要約すると、ストリームが即座にフラッシュされるかどうかは、バッファのサイズと、呼び出しごとに格納するデータの量の両方によって決まるため、有効な結果は約束(「バッファリング」)と少し異なります。

以下が幾分より詳細http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html(強調自分)からのものである:

はlenがバッファリングされた出力ストリームにオフオフセット始まる指定されたバイト配列からのバイト書き込み。

通常、このメソッドは、指定された配列のバイトをこのストリームのバッファに格納します。バッファは、必要に応じて基本出力ストリームにフラッシュします。ただし、要求された長さが少なくともこのストリームのバッファーと同じである場合、このメソッドはバッファーをフラッシュし、基になる出力ストリームに直接書き込みます。したがって、冗長なBufferedOutputStreamはデータを不必要にコピーしません。

+0

'BufferedOutputStream'はこれまでと同じようにバッファリングされていますが、それはありませんか? –

+0

確かに。各呼び出しの後にフラッシュすることの効果は、ストリームがバッファリングされないようにすることと同じかそれより悪いと言うだけです。これは、OPが各コールで保存するデータの量に応じて適切なバッファサイズを選択するかどうかによって異なります。 –

+0

私はeznmeについて説明したように、write(byte []、int、int)メソッドの微妙な点に気付いています。とにかくおかげで。ルイが言うように、私が「緩衝した」と言ったとき、私は「緩衝部が関与している」という意味で「緩衝された」という意味でした。 – user1209776

関連する問題