1

うまくいけば、これはJavaのBufferedOutputStreamsとDataOutputStreamsに関するすばやく簡単な質問です。

次のように出力ストリームにバイトを書き込むとき

myBufferedOutputStream.write(array);
myDataOutputStream.write(array);

これらのメソッドはそれらを即座にストリームに書き込んで戻りますか、それともブロックしますか?

コアJavaドキュメントには何も表示されませんでしたが、書き込みがブロックされないため、おそらく私の質問は意味がありませんか?

誰かが私をまっすぐにしてください。

ありがとう、jbu

4

4 に答える 4

3

ピーターの答えは最高でしたが、誤った情報から始めることで損なわれました。いいえ、「実装に依存する」わけではありません。バッファリングの要点は、ブロッキングの影響を和らげることですが、バッファがいっぱいになり、出力ハードウェアの準備ができていない場合、write() はブロックします。ただし、バッファリングされるため、単純なバニラ OutputStream よりもはるかに少ない頻度でブロックされ、スループットへの影響もはるかに少なくなります。バッファリングは、パフォーマンスを大幅に改善するための迅速かつ簡単な方法です。

于 2010-11-20T02:34:05.097 に答える
1

パッケージ java.io.* の API はブロックされる可能性があります。ただし、非同期 I/O に使用する必要がある Java NIO (New I/O または Non-blocking I/O) と呼ばれる特別な API があります。

パッケージ java.nio.* を見てください。ここでいくつかの例を見つけることができます: http://en.wikipedia.org/wiki/New_I/O

于 2009-07-13T18:56:00.200 に答える
1

の読み取りおよび書き込みメソッドはすべて、java.io.*ブロックされる可能性があります。非同期 I/O をサポートするものはありません。読み取りの場合は、 .available()または同様のメカニズムを使用して手動で実装する必要があります。執筆については、まあ、あなたは独力です。

于 2009-07-02T18:35:13.503 に答える
0

実装次第だと思います。のようなものを使用している場合、クラスがパフォーマンスのためにバッファリングを提供するため、BufferedOutputStreamへの呼び出しwrite()はおそらく「ブロック」されません。

ただし、 を使用している場合FileOutputStream、システム上で I/O リソースがどれだけビジーか/利用可能かによって書き込み呼び出しがブロックされるwrite()ことがあります。

于 2009-07-02T17:30:58.483 に答える