2009-07-02 54 views
0

希望這是一個關於java中的BufferedOutputStreams和DataOutputStreams的快速簡單的問題。java網絡I/O阻塞與否?

當我寫字節像

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

輸出流做這些方法寫他們立即到流和返回,還是他們曾經阻止?

我沒有看到核心java文檔中的任何東西,但也許我的問題沒有意義,因爲寫入不會阻止?

有人請直接給我。

感謝, JBU

回答

0

我認爲這取決於執行。如果您使用類似BufferedOutputStream的東西,則調用write()可能不會「阻止」,因爲該類提供緩衝以提高性能。

但是,如果使用FileOutputStream,則寫入調用可能會阻塞,具體取決於系統上I/O資源的忙/可用情況,因爲在此時調用write()可能實際上會觸發I/O操作,時間完成。

1

java.io.*中的所有讀取和寫入方法都有可能阻止。無支持異步I/O。爲了閱讀,必須使用.available()或類似的機制手動實施。寫作,好吧,你是獨立的。

1

包java.io. *中的API有可能被阻塞。但是,有一個稱爲Java NIO(新I/O或非阻塞I/O)的特殊API,您應該將其用於異步I/O。

看包的java.nio * 你可以在這裏找到一些例子:http://en.wikipedia.org/wiki/New_I/O

2

彼得的回答是最好的,但它是由與誤傳開始了污濁:沒有,它不「依賴實施「。緩衝的要點是緩和阻塞的影響,但是當緩衝區滿並且輸出硬件沒有準備好時,write()將被阻塞。但是由於它是緩衝的,因此與普通的Vanilla OutputStream相比,阻塞的頻率要低得多,對吞吐量的影響要小得多。緩衝是一種快速簡單的方法,可以大幅改善性能。