Java NIO Channel
通道(Channel)在 JDK NIO 中引入[1]。如果要从I/O设备(例如,硬盘或 Socket)中读取数据,则需要通过通道将数据写入到缓冲区,然后再从缓冲区读取数据。
1 | //创建一个服务端socket通道用于接收连接 |
Channel 实现
根据不同的使用方式,分为不同的通道。NIO实现了Sctp协议、TCP协议、UDP协议以及文件传输四种通道,同时还实现了Windows平台的异步Socket通道以及异步文件通道。
类型 | 通道 |
---|---|
Sctp协议客户端 | SctpChannel |
Sctp协议多播客户端 | SctpMultiChannel |
Sctp协议服务端 | SctpServerChannel |
UDP协议 | DatagramChannel |
TCP协议同步I/O服务端 | ServerSocketChannel |
TCP协议同步I/O客户端 | ServerChannel |
文件读写 | FileChannel |
平台实现的 Channel。
平台 | 类型 | 通道 |
---|---|---|
windows | TCP协议异步I/O服务端 | WindowsAsynchronousServerSocketChannel |
windows | TCP协议异步I/O客户端 | WindowsAsynchronousSocketChannel |
windows | 异步文件读写 | WindowsAsynchronousFileChannel |
macos,linux | TCP协议异步I/O服务端 | UnixAsynchronousServerSocketChannelImpl |
macos,linux | TCP协议异步I/O客户端 | UnixAsynchronousSocketChannelImpl |
macos,linux | 异步文件读写(OS不支持异步文件) | SimpleAsynchronousFileChannelImpl |
InterruptibleChannel
本文JDK源码基于Java8 ↩︎