netty基础(一)

一.NIO基础

1.1Channel  & Buffer

channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层

常见的Channel有

  1. FileChannel
  2. DatagramChannel
  3. SocketChannel
  4. ServerSocketChanne
  1. 1.2Selector

  2. 1.2.1Selector版设计

  3. selector 的作用就是配合一个线程来管理多个 channel获取这些 channel 上发生的事件非阻塞模式下,不会让线程吊死在channel 上。适合连接数特别多,但流量低的场景这channel工作在(low traffic)
  4. 1.3Bytebuffer

  5. 1.3.1Bytebuffer基本使用

  6. 1.导入依赖
  7.    
           
            
                io.netty
                netty-all
                4.1.39.Final
            
    
            
                org.projectlombok
                lombok
                1.18.24
            
    
            
                com.google.code.gson
                gson
                2.8.5
            
    
            
                com.google.guava
                guava
                14.0.1
            
    
            
                ch.qos.logback
                logback-classic
                1.2.3
            
        

    2.bytebuffer基本使用

  8. package com.it.heima;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class testByteBuffer {
        public static void main(String[] args) {
         //FileChannel
         //1。输入输出流
            try {
                FileChannel channel = new FileInputStream("D:\\git\\repository_idea\\netty\\src\\dada.txt").getChannel();
                //准备缓存区   划分一个内存作为缓冲区  划分的大小由allocate决定
                ByteBuffer buffer = ByteBuffer.allocate(10);
                //从channel读取数据,向buffer写入
                while (true) {
                    int read = channel.read(buffer);
                    if (read==-1){
                        break;
                    }
                    //打印buffer的内容
                    buffer.flip();//切换至读模式
                    //检查是否有剩余
                    while (buffer.hasRemaining()) {
                        byte b = buffer.get();
                        System.out.println((char) b);
                    }
                  buffer.clear();//切换写模式
                }
    
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
    }
    
        }
    
    

    netty基础(一)_第1张图片

     1.3.2ByteBuffer结构

  9. byteBuffer有以下重要属性
  1. capacity   代表容量    
  2. position    读写指针/读写下标
  3. limit           读写限制

你可能感兴趣的:(java,前端,服务器)