NIO

2019-05-06  本文已影响0人  全满

传统的socket分析

传统IO与NIO的比较
  1. 客户端关闭的时候会抛出异常,死循环
    解决方案:
int read = channel.read(buffer);
if(read > 0){
  byte[] data = buffer.array();
  String msg = new String(data).trim();
  System.out.println("服务器接收到消息:" + msg);

  //回写数据
  ByteBuffer outBuffer = ByteBuffer.wrap("好的".getBytes());
  //将消息回送给客户端
  channel.write(outBuffer);
}else{
  System.out.println("客户端关闭");
  //结束
  key.cancel();
}
  1. 读NIO的时候发现selector.select();是阻塞的。那为什么说NIO是非阻塞的IO呢?
    elector.select(1000)可以不阻塞
    elector.wakeup();可以唤醒selector
  2. SelectorKey.OP_WRITE是代表什么意思
    OP_WRITE表示底层缓冲区是否有空间,是则响应返回true
    NIO.png
    socketIO.png
上一篇 下一篇

猜你喜欢

热点阅读