JAVA NIO(知识一)

简介:

java nio基本上常用的组件,selector,channel,buffer。这三个,其他的可以用到的时候再去参考就可以了。


看一本书的时候,基本看前三章或者四章基础知识,剩下的,实际生产中用到了再去看就可以。


大白话解释这三个重要的单词

Channel:

Java的nio中,channel其实是用于传输的,也可以说是管道,是一个工具,可以对比一下io中的流,很类似。但是io中的流都是单向的,但是channel通道是双向的,就是这个通道里既可以读,也可以往里面写。这个channel跟buffer打交道是比较多的,再用nio的时候,读取数据是channel把数据读取到buffer,然后应用再从buffer中读取数据。写数据则是应用程序先把数据写入到buffer中,然后chanel把数据写入到io设备中,就是这样的交互过程


buffer:

buffer常用作解释成缓冲区,再介绍channel的时候,说过数据都是在缓冲区中的,读取数据的是把数据先读到buffer中,然后再从buffer中读数据。nio中的库都是这么操作数据的,并不是再channel中读写数据。缓冲区中有三个重要的状态:position,limit,capacity,再接下来的篇幅中介绍,这里就不多介绍了。


selector

常用作解释成选择器,我把它解释成监听器,用来监听一个或者多个通道,通道可以把自己感兴趣的操作注册到selector上,比如read,write,connect,accept,然后selector负责监听。它是用单线程来处理这些操作的,单线程有单线程的好处,好处就是可以避免多线程之间的线程切换,这样开会会很大。基本一句话说明这个selector是用来管理多个通道的。


下面说说JAVA NIO的io模型,看过java nio都知道都说NIO是异步非阻塞io。


阻塞&非阻塞:

java io是阻塞IO,当你发起一个IO读取数据请求的时候,如果有数据还好可以读,没有数据IO会一直阻塞那里,而NIO则相反,如果没有数据可读就返回,告诉用户线程当前没有数据。


同步&异步:

同步IO发起IO操作的时候会一直等待操作完成,这种操作是同步的。异步IO则是发起IO操作,如果当前没有符合的操作,则返回。


重点:多路复用io模型

其实java nio就是采用多路复用io模型的,NIO中的seletor就是单线程监听注册的channel是否有就绪事件发生,一个线程管理多个channel,只有真正有读写事件发生的时候才会触发操作。多路复用是采用轮训的方式来检测事件是否到达,并对事件追忆进行处理,如果请求的事件比较多,一个线程监听还是有弊端的,处理不过来,会导致新来的事件搁置或者停留达不到快速响应。


JAVA NIO Selector 知识三 http://shangdc.blog.51cto.com/10093778/1956602


JAVA NIO buffer (知识三)

http://shangdc.blog.51cto.com/10093778/1956602


JAVA NIO 之 channel通道(知识二)

http://shangdc.blog.51cto.com/10093778/1955874


JAVA NIO 知识一

http://shangdc.blog.51cto.com/10093778/1955793


欢迎老司机指正,提出更好的讲述和见解。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1955793

相关文章
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
7天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
2月前
|
移动开发 编解码 网络协议
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
|
2月前
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
2月前
|
编解码 网络协议 Java
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
|
3月前
|
Java 应用服务中间件 Linux
java中的NIO,BIO,AIO
java中的NIO,BIO,AIO
17 0
|
3月前
|
设计模式 网络协议 Java
Java NIO 网络编程 | Netty前期知识(二)
Java NIO 网络编程 | Netty前期知识(二)
77 0
|
3月前
|
Java 索引
📌 Java NIO Buffer
Java NIO缓冲区在与NIO通道交互时使用。数据从通道读取到缓冲区,然后从缓冲区写入通道。 缓冲区本质上是一块内存,可以在其中写入数据,然后再进行读取。这个内存块被封装在一个NIOBuffer对象中,该对象提供了一组方法,可以更容易地使用内存块。
|
3月前
|
缓存 网络协议 Java
📌 Java NIO Channel
Java NIOChannel和传统的流相似,但是也存在一些差异: • 在同一个Channel通道中,既可以进行 读操作 也可以进行 写操作,但是 流 只能进行 读 或者 写 其中一种操作。 • Channel通道可以进行异步读写。 • Channel可以从 Buffer中进行读写操作。将数据从Channel通道读取到Buffer缓冲区,并将数据从Buffer缓冲区写入Channel通道。