java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新API(New IO),为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。Java NIO实际上是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。
随着NIO的引入,最大限度的满足了Java程序I/O的需求。在NIO中有三大核心组件: Channel, Buffer, Selector,传统的IO面向流的,每次可以从流中读取一个或多个字节,只能向后读取,不能向前移动,NIO是面向缓冲区的,把数据读到一个缓冲区中,可以在缓冲区中向前/向后移动,增加了程序的灵活性。在NIO中,所有的数组都需要通过Channel传输,通道可以直接将一块数据映射到内存中。Channel是双向的,不仅可以读取数据, 还能保存数据,程序不能直接读写Channel通道,Channel只与Buffer缓冲区交互。
java.nio 包定义了缓冲区类,这些类用于所有 NIO API。java.nio.charset包中定义了字符集API,java.nio.channels包中定义了信道和选择器 API。每个子包都具有自己的服务提供程序接口(SPI) 子包,SPI 子包的内容可用于扩展平台的默认实现或构造替代实现。
很多刚接触NIO的人,第一眼看到的就是Java相对晦涩的API,比如:Channel,Selector,Socket什么的;然后就是一坨上百行的代码来演示NIO的服务端Demo……瞬间头大有没有?那么就让我们全新推出的NIO视频教程来帮你搞定Java NIO编程这件小事。课程目录如下:
1-1 程序读取数据模型 (12:10)
1-2 NIO与传统IO的区别 (08:36)
2-1 缓冲区的常用属性 (13:39)
2-2 Buffer常用的API (12:24)
2-3 演示Buffer的基本操作 (24:01)
2-4 缓冲区的批量传输 (21:46)
2-5 缓冲区创建的两种方式 (11:30)
2-6 缓冲区的复制与分隔 (12:25)
2-7 直接字节缓冲区 (09:02)
3-1 Channel概述 (08:08)
3-2 Scatter与Gather (15:48)
3-3 FileChannel内存映射文件 (19:43)
3-4 FileChannel双向读写 (09:13)
3-5 FileChannel读写文件时缓冲区固定大小 (05:42)
3-6 FileChannel通道与通道之间的传输 (06:39)
3-7 Gather代码演示 (23:04)
3-8 SeverSocketChannel服务器 (13:17)
3-9 SocketChannel客户端 (11:17)
3-10 DatagramChannel数据接收端 (09:05)
3-11 DatagramChannel数据发送端 (07:30)
3-12 Pipe管道 (21:58)
4-1 Selector选择器基础1 (12:35)开始学习
4-2 Selector选择器基础2 (17:26)
4-3 SelectionKey选择键常用方法 (14:26)
4-4 使用选择器1 (12:53)
4-5 服务器端代码模板 (08:13)
4-6 使用selector开发服务器端 (20:46)
4-7 开发客户端 (05:50)
其实,学习Java NIO的关键所在是我们要抛开现象看本质,先分析下NIO是怎么工作的。所有的系统I/O都分为两个阶段:等待就绪和操作。举例来说,读函数,分为等待系统可读和真正的读;同理,写函数分为等待网卡可以写和真正的写。NIO一个重要的特点是:socket主要的读、写、注册和接收函数,在等待就绪阶段都是非阻塞的,真正的I/O操作是同步阻塞的(消耗CPU但性能非常高)。
当然,Java NIO也不是十全十美的,并发程度不高或者局域网环境下NIO并没有显著的性能优势。但对于其他环境下的Java NIO编程,毫无疑问是独具优势的,而我们学习动力节点在线的课程的目的就是能够妥善地使用Java NIO编程,通过理解课程中诠释的一些NIO的思想和设计理念以及应用场景,讲Java NIO编程使用起来得心应手。
代码小兵49806-11 15:28
代码小兵49806-11 15:51
代码小兵49806-11 16:22
代码小兵51603-29 17:28
暴风城-小飞04-06 20:49