为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

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

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

课程讲师: 张小喜


课程内容

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

JDK 1.4

高并发网络服务器支持岗



https://img1.sycdn.imooc.com//6328805f0001f94a10910588.jpg

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


https://img1.sycdn.imooc.com//6328826e0001c91b10060597.jpg


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


https://img1.sycdn.imooc.com//632883130001c8d010510573.jpg

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

非阻塞性

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


实现类

文件类:FileChannel

UDP类:DatagramChannel

TCP类:ServerSockerChannel / SocketChannel

https://img1.sycdn.imooc.com//6328869400014f6c10930608.jpg


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核心类的相关方法介绍和使用,对后面的实战打下基础



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消