网络IO的java实现方式

    我们在使用Socket进行套接字进行网络通信开发时,可以使用三种java API来完成,它们分别是: BIO, NIO和AIO. 

     1. BIO方式:   Blocking IO,即采用了阻塞方式, 它采用一个Socket套接字需要使用一个线程来处理。 建立联接,读数据,写数据的操作时,都可能发生阻塞。  这种模式非常简单,但问题是一个线程只能处理一个Socket, 如果是Server端,那么在支持并发的连接时,就需要更多的线程来完成这个工作。

     2. NIO方式:     Nonblocking IO, 他基于事件驱动思想,采用的是Reactor模工。 在java的服务端系统中也是采用比较多的一种方式。NIO主要的优点是不需要为每个Socket套接字分配一个线程, 而可以在一个线程中处理多个Socket套接字相关的工作.  在NIO的方式下不是用单个线程去应对单个Socket套接字,而是统一通过Reactor对所有客户端的Socket套接字的事件做处理,然后派发到不同的线程中。这就解决了BIO中为了支撑更多的Socket套接字而需要打开更多线程的问题.

     3. AIO方式:  AsynchronousIO, 就是异步IO. AIO采用Proactor模式。 AIO与NIO的差别是,AIO在进行读/写操作时,只需要调用相应的read/write方法,并且需要传入CompletionHandler(动作完成的处理器);在动作完成后,会调用CompletionHandler,当然,在不同的系统上会有一些细微的差异。 AIO是在java 7中引入的。

在java生产领域,服务端的代码目前基本都是基于NIO的.  


        AIO与NIO的一个最大的区别是,NIO在有通知时可以进行相关操作,例如读或写,而AIO在有通知时表示相关操作已经完成。 

你可能感兴趣的:(j2se)