2009-07-02 6 views
0

これは、JavaのBufferedOutputStreamsとDataOutputStreamsに関するすばやく簡単な質問です。私はJavaネットワークの入出力がブロックされているかどうか

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

などの出力ストリームにバイトを書き込むと

は、これらのメソッドは、ストリームに即座にそれらを書いて、返すか、彼らがこれまでブロックしますか?

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

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

おかげで、 JBU

答えて

0

私はそれが実装に依存信じています。 BufferedOutputStreamのようなものを使用している場合、write()の呼び出しは、クラスがパフォーマンスのためのバッファリングを提供するため、「ブロック」しない可能性があります。

FileOutputStreamを使用すると、write()への呼び出しが実際にI/O操作をトリガする可能性があるため、システム上のI/Oリソースのビジー状態/使用可能状態によって書き込み呼び出しがブロックされることがあります。完了までの時間。

1

java.io.*の読み取りと書き込みの方法はすべてブロックする可能性があります。いずれも非同期I/Oをサポートしていません。読み取りのためには、.available()または同様のメカニズムを使用して手動で実装する必要があります。執筆のために、まあ、あなたはあなた自身である。

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

2

ピーターの答えは最高だったが、それは誤報で出始めによって損なわれた:いいえ、それは「に依存しません実装 "です。バッファリングの全体的なポイントは、ブロッキングの影響を緩和することですが、バッファがいっぱいで出力ハードウェアが準備ができていない場合、write()はブロックします。しかし、バッファリングされているので、プレーンバニラOutputStreamよりもはるかに少ない頻度で、スループットに与える影響はずっと少なくなります。バッファリングは、パフォーマンスを大幅に改善するためのすばやく簡単な方法です。

関連する問題