手记

【九月打卡】第14天 解锁网络编程之NIO的前世今生

课程名称 解锁网络编程之NIO的前世今生

课程章节:第2章 NIO网络编程模型、第3章 【熟悉】NIO网络编程详解

课程讲师: 张小喜


课程内容

NIO :  Non-blocking I/O 或New I/O

JDK 1.4

高并发网络服务器支持岗




服务端等待客户端请求中是阻塞的,一直在等待,很多客户端请求时会遇到服务器建立线程资源枯竭的问题。



改进点就是将阻塞IO修改为非阻塞IO模型,解耦,单线程节省资源


channel 同流不同的地方在于channel是双向的,可读可写。

非阻塞性

操作唯一性,只能通过buffer来操作


实现类

文件类:FileChannel

UDP类:DatagramChannel

TCP类:ServerSockerChannel / SocketChannel


try {
    // 服务器通过服务端Socket 创建channel
    ServerSocketChannel serverChannel = ServerSocketChannel.open();
    // 服务端绑定端口
    serverChannel.bind(new InetSocketAddress(8000));

    // 服务器端监听客户端连接,建立socketchannel连接
    SocketChannel accept = serverChannel.accept();
    // 客户端连接远程主机及端口
    SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8000));


} catch (IOException e) {
    e.printStackTrace();
}


Buffer简介

作用:读写channel中数据

本质:一块内存区域,本质相当于byte的数组

属性: Capacity 容量  超过容量清空后再写入

           Position  位置  当前位置,读模式时position重置为0

            limit       上限  写模式时最多可以写入的,读模式表示可以最多读取的数据-写模式下的position值

            Mark      标记  存储一个特定的position,调用buffer的reset方法恢复到mark位置,依然可以从这个位置开始处理数组

除了boolean之外基础的数据类型都有buffer的实现类


ByteBuffer bytebuf = ByteBuffer.allocate(10);

bytebuf.put("agc".getBytes(Charset.forName("UTF-8")));

// 从写模式切换到读模式
bytebuf.flip();

byte b = bytebuf.get();
System.out.println(b);

Buffer mark = bytebuf.mark();

bytebuf.get();
bytebuf.reset();

bytebuf.clear();



课程收获
  NIO核心类的相关方法介绍和使用,对后面的实战打下基础



0人推荐
随时随地看视频
慕课网APP