WEB开发网
开发学院软件开发Java 在Java中使用NIO进行网络编程 阅读

在Java中使用NIO进行网络编程

 2009-12-29 00:00:00 来源:WEB开发网   
核心提示:在JDK中,有一个非常有意思的库:NIO(New I/O),在Java中使用NIO进行网络编程,这个库中有3个重要的类,分别是java.nio.channels中Selector和Channel,Buffer对象提供读写数据的缓存,相对于我们熟悉的Stream对象,以及java.nio中的Buffer,本篇文章我们首先

在JDK中,有一个非常有意思的库:NIO(New I/O)。这个库中有3个重要的类,分别是java.nio.channels中Selector和Channel,以及java.nio中的Buffer。

本篇文章我们首先了解一下为什么需要NIO来进行网络编程,然后看看一步一步来讲解如何在网络编程中使用NIO。

为什么需要NIO

使用Java编写过Socket程序的同学一定都知道Socket和SocketServer。当调用某个调用的时候,调用的地方就会阻塞,等待响应。这种方式对于小规模的程序非常方便,但是对于大型的程序就有点力不从心了,当有大量的连接的时候,我们可以为每一个连接建立一个线程来操作。但是这种做法带来的缺陷也是显而易见的:

1.硬件能够支持大量的并发。

2.并发的数量始终有一个上限。

3.各个线程之间的优先级不好控制。

4.各个Client之间的交互与同步困难。

我们也可以使用一个线程来处理所有的请求,使用不阻塞的IO,轮询查询所有的Client。这种做法同样也有缺陷:无法迅速响应Client端,同时会消耗大量轮询查询的时间。

所以,我们需要一种poll的模式来处理这种情况,从大量的网络连接中找出来真正需要服务的Client。这正是NIO诞生的原因:提供一种Poll的模式,在所有的Client中找到需要服务的Client。

回到我们刚刚说到的3个最最重要的Class:java.nio.channels中Selector和Channel,以及java.nio中的Buffer。

Channel 代表一个可以被用于Poll操作的对象(可以是文件流也可以使网络流),Channel能够被注册到一个Selector中。通过调用Selector的 select方法可以从所有的Channel中找到需要服务的实例(Accept,read ..)。Buffer对象提供读写数据的缓存。相对于我们熟悉的Stream对象,Buffer提供更好的性能以及更好的编程透明性(人为控制缓存的大小以及具体的操作)。

1 2 3 4  下一页

Tags:Java 使用 NIO

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接