Java NIO Channel

通道(Channel)在 JDK NIO 中引入[1]。如果要从I/O设备(例如,硬盘或 Socket)中读取数据,则需要通过通道将数据写入到缓冲区,然后再从缓冲区读取数据。

1
2
3
4
5
6
7
8
//创建一个服务端socket通道用于接收连接
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(8080));
//等待连接
SocketChannel socketChannel = serverSocketChannel.accept();
ByteBuffer buf = ByteBuffer.allocate(1024);
//数据将写入到buffer中
int length = socketChannel.read(buf);

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。

平台类型通道
windowsTCP协议异步I/O服务端WindowsAsynchronousServerSocketChannel
windowsTCP协议异步I/O客户端WindowsAsynchronousSocketChannel
windows异步文件读写WindowsAsynchronousFileChannel
macos,linuxTCP协议异步I/O服务端UnixAsynchronousServerSocketChannelImpl
macos,linuxTCP协议异步I/O客户端UnixAsynchronousSocketChannelImpl
macos,linux异步文件读写(OS不支持异步文件)SimpleAsynchronousFileChannelImpl

InterruptibleChannel


  1. 本文JDK源码基于Java8 ↩︎