1

メソッドwrite(byte [] b)を使用してBufferedOutputStreamに書き込む場合、FilterOutputStreamのwriteメソッドが使用されます。ドキュメントには次のように書かれています。

「FilterOutputStreamのwriteメソッドは、引数b、0、およびb.lengthを持つ3つの引数のwriteメソッドを呼び出します。」

3つの引数を持つどの書き込みメソッドを参照していますか?FilterOutputStreamにあるもの、またはBufferedOutputStreamにあるもの?(つまり、書き込みは実際にバッファリングされていますか?)

そうだと思いますが、よくわかりません。

4

2 に答える 2

1

BufferedOutputStream メソッドをオーバーライドしてwrite(byte[], int, int)、新しいオーバーライドが呼び出されるようにします。はい、書き込みはバッファリングされます。

于 2012-02-14T19:00:28.487 に答える
1

答えはイエスとノーの両方です。私の発見を要約すると、ストリームがすぐにフラッシュされるかどうかは、バッファのサイズと呼び出しごとに保存するデータの量の両方に依存するため、効果的な結果は約束(「バッファリング」)とは少し異なります。

以下は、もう少し詳細なhttp://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html(私自身を強調)からのものです。

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

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

于 2012-02-14T19:06:32.360 に答える