Closed geekyouth closed 2 years ago
Java的IO流,根据类型不同划分为(具体继承这些IO类的子类非常多)
Java传统的IO类操作都是阻塞的,在高并发的场景下性能令人堪忧。
Java NIO(Non-blocking IO)是JDK1.4之后推出的一套新IO接口——非阻塞IO,与传统IO接口的主要区别在于:
1). Channel,相对于Stream,有几点区别:
2). NIO数据的流向总是:
Channel ----> Buffer Channel <---- Buffer
3). Channel主要有下面几种类型:
4). 具体获取Channel的类
Buffer实际上就是一块内存区,用于和Channel交互,需要注意的是:
Buffer是非线程安全的,如果需要在多线程环境中使用,则需要有同步锁。
1). Buffer基本概念
要真正理解Buffer,有一张图比较经典:
通常,0 <= mark <= position <= limit <= capacity
2). Buffer类型
3). Buffer常用操作
Buffer常用操作模式:
Selector是NIO中的组件,检查一个或多个channel,实现一个线程管理多个网络链接。
使用步骤:
Channel必须是非阻塞的。所以FileChannel不适用Selector,因为FileChannel不能切换为非阻塞模式。Socket channel可以正常使用。
深入分析 Java I/O 的工作机制
Java NIO 简明教程
攻破JAVA NIO技术壁垒
高性能Server--Reactor模型
Java NIO浅析
https://github.com/johnnian/Blog/issues/36
一、I/O & NIO
Java的IO流,根据类型不同划分为(具体继承这些IO类的子类非常多)
Java传统的IO类操作都是阻塞的,在高并发的场景下性能令人堪忧。
Java NIO(Non-blocking IO)是JDK1.4之后推出的一套新IO接口——非阻塞IO,与传统IO接口的主要区别在于:
二、NIO基本概念
2.1 Channel
1). Channel,相对于Stream,有几点区别:
2). NIO数据的流向总是:
Channel ----> Buffer Channel <---- Buffer
3). Channel主要有下面几种类型:
4). 具体获取Channel的类
2.2 Buffer
Buffer实际上就是一块内存区,用于和Channel交互,需要注意的是:
Buffer是非线程安全的,如果需要在多线程环境中使用,则需要有同步锁。
1). Buffer基本概念
要真正理解Buffer,有一张图比较经典:
通常,0 <= mark <= position <= limit <= capacity
2). Buffer类型
3). Buffer常用操作
Buffer常用操作模式:
2.3 Selector
Selector是NIO中的组件,检查一个或多个channel,实现一个线程管理多个网络链接。
使用步骤:
Channel必须是非阻塞的。所以FileChannel不适用Selector,因为FileChannel不能切换为非阻塞模式。Socket channel可以正常使用。
参考链接
深入分析 Java I/O 的工作机制
Java NIO 简明教程
攻破JAVA NIO技术壁垒
高性能Server--Reactor模型
Java NIO浅析
https://github.com/johnnian/Blog/issues/36