马士兵教育---周老师透彻的讲nio
nio底层原理讲解后再写一遍代码
这个是b站 马士兵培训 周老师的视频地址。
吐槽一下,马士兵培训 发布的视频都是标题党 且文不对题 的较多,但 值得看 。
https://www.bilibili.com/video/BV1ft4y1i7G1?p=15
JD中的NIO 是什么
本视频
0~20 分钟 讲的是 nio
21~30 分钟 讲的是 select 原理
下面的代码1 代码2 是一样的 一个是早上写的一个是晚上写的
此代码是在看完两遍视频,第一次写磕磕绊绊后 ,第二第三次,可以做到不看视频,自己从头写到尾(当然还会忘记个别的代码,调试即可),
如果是在windows 上面 需要用调试助手,tcp 链接后 发送内容
如果是Linux 用 nc ip port 作为客户端链接 进行测试
好了,不多讲了,我要看下一讲 select 了
https://www.bilibili.com/video/BV1ft4y1i7G1?p=16
感慨:
马士兵的课比较贵,先把免费的瞟了,后面再考虑是否买课系统学习,每天上班没有时间,本月工资还打了八折,详见天泽信息公告,更没有足够的钱买课了。
我的代码1
package com.tiza.leo.NIO;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.LinkedList;
/**
* Author: tz_wl
* Date: 2020/9/16 7:06
* Content:
*/
public class nioserver01 {
public static void main(String[] args) throws IOException {
// //step 1 初始化 serverSocket nio 的方式
// //step 2 配置 serverSocket noBlocking 为 false
// //step 3 配置地址 端口号
// //step 4 while 循环遍历 serversocket
// //step 5 循环一次休息一秒钟
// //step 6 获取 socket 判断 是否为空(因为是非阻塞的所以accept一定有返回 ,没有连接时候为null)
// //step 7 null 打印
// //step 8 not null 打印 将结果加入到linkedlist<socketChannel>
// //step 9 循环访问 linkedList
// {
// //step 10 如果当前 socketChannel .read > 0 ,说明有数据走此通道
// //step 11 将数据读到 byteBuffer 中去
// //step 12 flip 准备从 ByteBuffer 中取出数据
// //step 13 byteBuffer.read(byte[] bs) 将数据从ByteBuffer 读取到 byte[]中
// //step 14 new String byte[] 中的数据
// //step 15 打印取到的string
// //step 16 清空Bytebuffer,供下一个循环使用
// //step }
//step 8 初始化linkedList
LinkedList<SocketChannel> clients = new LinkedList<>();
// //step 1 初始化 serverSocket nio 的方式
// //step 2 配置 serverSocket noBlocking 为 false
// //step 3