2009-07-02 75 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相比,阻塞的频率要低得多,对吞吐量的影响要小得多。缓冲是一种快速简单的方法,可以大幅改善性能。