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