java NIO与java IO


java中的io,对我来说仍是一个谜,今天同事都在讨论,发现自己啥都不懂,在其他处看了点,记录下。

java io:在Client/Service模式中,Service需要处理大量的Client请求,容易阻塞,Service为每个Client创建一个线程,每个线程阻塞式等待可能达到的数据,数据达到,就处理请求,返回处理结果并再次进入等待状态。

java Nio:我对此的理解,觉得就是一个一个类似工厂的存在,你需要就可以直接去取,引入Reactor(反应器)设计模式的多路复用异步模式。

Channel(通道):I/O对象抽象为Channel,它模拟了通信连接,类似原Io中的流,用户可以用它读写操作

Buffer(缓冲区):是一块连续的内存区域,一般作为Channel的收发数据的载体。所有数据都通过Buffer对象处理

Selector(选择器):提供了监控一个和多个Channel当前状态的机制。Selector就会监听这些事件是否会发生,一旦发生某个事件,便会通知对应的Channel。使用选择器,借助单一线程,就可对数量很多的io进行监控和维护

java Nio采用了双向通道进行数据传输,而不是单向的流,在通道可以注册我们感兴趣的事件。

服务端跟客户端各自维护了一个管理通道的对象,我们称它为Selector 如果服务端的selector注册了读事件,某时刻客户端向服务器发送了一些数据,阻塞io会调用read()方法阻塞的读取数据,而nio的服务端会在selector中添加一个读事件,服务器的处理线程会轮询地访问selector,如果selector对某个事件感兴趣那么就处理这个事件。

使用NIO中非阻塞IO编写服务器大致分三个步骤1.向Selector对象注册感兴趣的事件2.从Selector中获取感兴趣事件3.根据不同的事件进行相应的处理。

并不是很懂 不喜勿喷

你可能感兴趣的:(java,nio)