Java从JDK 1.4开始支持NIO(New IO),与传统IO相比,NIO是非阻塞的,它包含三个核心组件:
- Channel,类似于Stream,但不同于Stream单向,Channel是双向的,从同一个Channel既可以读取数据,也可以写入数据;
- Buffer,向Channel写入数据或从Channel读取数据时,数据需先写入Buffer或读入Buffer;
- Selector,多个Channel可以注册到一个Selector中,Selector可以通过单线程侦听这些Channel,当有读、写、连接事件时(而不是阻塞等待读、写或连接),执行相应的操作。
基于Java NIO实现服务端与客户端的非阻塞通信如图所示:
服务端代码
1 | package com.magicwt; |
客户端代码
1 | package com.magicwt; |
分别启动服务端和客户端程序,输出如下所示。
服务端:
客户端: