nio三大组件
channel,buffer,selector
channel为双向输入输出通道,buffer为缓存,selector为选择器,通过selector来选择线程对出现io操作的channel服务,可有有效的增加线程的工作效率,不用等待某个连接断开才释放线程
bytebuffer
//申请空间
ByteBuffer byteBuffer = ByteBuffer.allocate(100);
//获取通道
FileChannel channel = new FileInputStream().getChannel();
//循环读取
while (true){
int read = channel.read(byteBuffer);
if (read == -1) break;
//切换读模式
byteBuffer.flip();
while (byteBuffer.hasRemaining()){
byte b = byteBuffer.get();
}
//切换写模式
byteBuffer.clear();
}
buffer写入数据可以使用
- 调用 channel 的 read
- 调用 buffer 自己的 put
buffer读数据有write和get
可以通过这样的方式填充多个buffer,abc为三个buffer对象
channel.read(new ByteBuffer[]{a, b, c});
同理也可以使用put和write读出写入channel