博客

超级管理员

50

帖子

8

回复

136

积分

楼主
发表于 2019-12-10 14:44:18 | 查看: 169 | 回复: 1

学习重点:


传统IO与NIO比较
传送IO特点
阻塞点
server.accept();
inputStream.read(bytes);
单线程情况下只能有一个客户端
用线程池可以有多个客户端连接,但是非常消耗性能
=======================分割线==========================

NIO的特点
ServerSocketChannel    ServerSocket
SocketChannel        Socket
Selector
SelectionKey
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();
        }

2、selector.select();阻塞,那为什么说nio是非阻塞的IO?

    selector.select()
    selector.select(1000);不阻塞
    selector.wakeup();也可以唤醒selector
    selector.selectNow();也可以立马返还,视频里忘了讲了,哈,这里补上


3、SelectionKey.OP_WRITE是代表什么意思

OP_WRITE表示底层缓冲区是否有空间,是则响应返还true

在线视频:

1、传统的socket分析

2、NIO的代码分析

3、网上对于一些NIO的疑惑

课件源码下载:

IOServer.rar

笔记.txt

NIO.png

socketIO.png



本帖子中包含资源

您需要 登录 才可以下载,没有帐号?立即注册

您的帖子在2019-12-10 14:45:25被新思维编辑
您的帖子在2019-12-10 15:00:16被新思维编辑
您的帖子在2019-12-10 15:24:27被新思维编辑
您的帖子在2019-12-10 15:25:43被新思维编辑
您的帖子在2019-12-10 16:21:23被新思维编辑
您的帖子在2019-12-10 16:24:01被新思维编辑
您的帖子在2019-12-28 14:30:16被新思维编辑

超级管理员

50

帖子

8

回复

136

积分
沙发
发表于 2019-12-10 16:28:12

后面的代码笔记直接下载

您需要登录后才可以回帖 登录 | 立即注册

2018-2020 ©v2.1 冀ICP备19027484号

点击这里给我发消息