Java NIO 基础
2016-06-16 16:04
330 查看
和阻塞IO对应,
socket ————– socketChannel
serverSocket———-serverSocketChannel
这两种通道又支持阻塞和非阻塞两种实现模式。
阻塞模式代码简单,但是性能和可靠性不好。非阻塞模式相反。
在以前面向流的IO中,输入输出是直接写到Stream中的。
在NIO里,所有数据的读写都是要通过缓冲区来的。
常用的缓冲区是ByteBuffer。实际上,每一种java基本类型都有对应的Buffer(boolean除外)。ByteBuffer常用是因为他最适合网络读写。
和流的重要区别的,channel是双向的。
channel是全双工的。
channel主要非两大类:
用于网络读写的SelectableChannel
用于文件读写的FileChannel
selector是NIO编程的基础。非常重要。
selector会轮询注册其上的channel。如果某个channel有新的tcp连接,或者读写事件,那么这个channel就处于就绪状态,会被selector轮询出来。然后可通过selectionKey得到这个就绪的Channel,进行IO操作。
jdk使用epoll代替传统的select实现,因此它没有最大连接句柄1024/2048的限制,只需要一个线程负责selector轮询,就可以接入成千上万的连接。
代码示例:
socket ————– socketChannel
serverSocket———-serverSocketChannel
这两种通道又支持阻塞和非阻塞两种实现模式。
阻塞模式代码简单,但是性能和可靠性不好。非阻塞模式相反。
基本概念
buffer
缓冲器buffer对象是NIO类库新加入的对象。他是非常重要的。在以前面向流的IO中,输入输出是直接写到Stream中的。
在NIO里,所有数据的读写都是要通过缓冲区来的。
常用的缓冲区是ByteBuffer。实际上,每一种java基本类型都有对应的Buffer(boolean除外)。ByteBuffer常用是因为他最适合网络读写。
channel
通道。和流的重要区别的,channel是双向的。
channel是全双工的。
channel主要非两大类:
用于网络读写的SelectableChannel
用于文件读写的FileChannel
selector
多路复用器。前面说过NIO的IO模型是用的多路复用IO。selector是NIO编程的基础。非常重要。
selector会轮询注册其上的channel。如果某个channel有新的tcp连接,或者读写事件,那么这个channel就处于就绪状态,会被selector轮询出来。然后可通过selectionKey得到这个就绪的Channel,进行IO操作。
jdk使用epoll代替传统的select实现,因此它没有最大连接句柄1024/2048的限制,只需要一个线程负责selector轮询,就可以接入成千上万的连接。
时序图
代码示例:
相关文章推荐
- Resource Components of Spring
- JAVA基础(28) web.xml中<security-constraint>和四种认证类型
- ThreadLocal 初试
- Java POI Excel
- Spring框架学习(一)
- RxJava操作符(09-算术/聚合操作&连接操作)
- RxJava操作符(09-算术/聚合操作&连接操作)
- Java/Scala 通过JNI调用包含CUDA代码的函数可能遇到的问题
- java基础-静态代码块执行
- Java基础---@XmlRootElement 注解对象
- 根据前序遍历和中序遍历构造二叉树 java
- java Stack源码解析
- Java NIO(New I/O)的三个属性position、limit、capacity
- java取当前周期、月初至月末、季度初至季度末日期。
- SpringMVC的web.xml的配置。
- spring @Entity @Table
- spring mvc 请求处理方式...
- 使用Shiro 集合Spring来实现权限控制
- 深入SpringBoot:自定义PropertySourceLoader
- JAVA环境变量的配置