<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      NIO三大戰神

      ——————戰神1 Channel通道

      Channel (通道)

      常見的Channel

        1 FileChannel   數據文件傳輸通道

        2 DatagramChannel DUP網絡傳輸通道

        3 SocketChannel TCP網絡傳輸通道

        4ServerSocketChannel  TCP網絡傳輸通道

      ——————戰神2Buffer 數據緩沖區

      Buffer (數據的內存緩沖區)

      常見的Buffer有

        1 ByteBuffer  抽象類

          實現類 

            MappedByteBuffer

            DirectByteBuffer

            HeapByteBuffer

        2ShortBuffer

        3IntBuffer

        4LongBuffer

        5FloatBuffer

        6DoubleBuffer

        7CharBuffer    

      ——————戰神3Selector 選擇器

      Selector 選擇器

      1selector 是干什么的呢?

      在我們傳統BIO上是針對每一個請求創建一個線程,每一個線程都是阻塞模式的,而且線程的資源終究是有限的, 即使選擇使用線程池也是很浪費資源,那么這個時候我們的selector就上場了

       代碼案例:

       public static void main(String[] args) {
            try{
                FileChannel  channel = new FileInputStream("data.txt").getChannel();
              //準備緩沖區
                ByteBuffer buffer=ByteBuffer.allocate(10);//容量 10個字節
                //從channel 讀取 寫入到buffer
                while (true){
                   int len = channel.read(buffer);
                   System.out.print("讀取到的字節="+len);
                   if(len==-1){
                       break;
                   }
                    //打印buffer 內容
                    buffer.flip();//切換讀模式
                    while (buffer.hasRemaining()){
                        byte b=  buffer.get();//讀一個字節
                        System.out.print((char)b);
                    }
                    buffer.clear();//切換為寫模式
                }
            }catch (Exception e){
              e.printStackTrace();
            }
          }
      }
      

       ByteBuffer的使用

       ByteBuffer 內部有三個結構

      1 capacity 容量大小

      2 position 當前讀或寫處理的位置(指針) 

       

       

      3limit 線程處理 寫入限制

      首次limit 的位置是 緩沖區最大位置

      在 讀和寫 切換的時候 Position位置是會變動的  例如 寫模式從0 寫入到位置4 后切換讀模式 那么position就會重新變成0 而limit 就會變成寫模式position的位置  意思是你最多能讀取到剛剛寫到截止的那個位置

      flip()方法//切換讀模式

      clear()方法//切換至寫模式

      讀模式讀取完畢后,在切換寫模式,position 又從新回到0了 因為是又一次讀取了 可以覆蓋上一次的數據了

      compact()方法 是對于緩沖區內未讀完的數據進行保留,而切換寫模式在保留數據的后面繼續寫,而不是像clear那樣全部刪除緩沖區

      get(i)獲取指定下標的數據 position 位置不會變

      public static void main(String[] args) {
              ByteBuffer buffer=  ByteBuffer.allocate(10);
      
              buffer.put(new byte[]{'a','b','c','d'});
              //切換讀模式
              buffer.flip();
      
              //從頭開始讀
      
              buffer.get(new byte[4]);
              System.out.println(buffer);
              //從頭開始讀
              buffer.rewind();
              System.out.println((char) buffer.get());//讀取a
              System.out.println((char) buffer.get());//讀取b
      
              buffer.mark();//做標記 通常和reset()配合使用   reset是跳回上次標記的位置
              System.out.println(buffer);
              System.out.println((char) buffer.get());//讀取c
              System.out.println((char) buffer.get());//讀取d
              buffer.reset();// reset是跳回上次mark 標記的位置
              System.out.println((char) buffer.get());//讀取c
      
          }
      

       

       

      posted @ 2023-04-07 23:50  郎小樂  閱讀(27)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品毛片一区二区 | 午夜精品久久久久久久爽| 深夜精品免费在线观看| 国产无套精品一区二区| 久久天堂无码av网站| 在线看片免费人成视久网| av中文无码韩国亚洲色偷偷| 在线播放亚洲成人av| 色悠悠久久精品综合视频| 东方av四虎在线观看| 好吊视频一区二区三区| 亚洲aⅴ无码专区在线观看q| 日韩精品一区二区三区不卡| 国产高清在线A免费视频观看| 亚洲一本二区偷拍精品| 亚洲av色综合久久综合| 久久人人爽人人爽人人av| 99视频偷窥在线精品国自产拍| 亚洲春色在线视频| 精品人妻中文字幕av| 亚洲成熟女人毛毛耸耸多| 亚洲 中文 欧美 日韩 在线 | 久久夜色精品国产亚av| 国产第一页浮力影院入口| 色综合久久一区二区三区| 真实国产老熟女无套内射| 午夜高清福利在线观看| 日本丰满护士bbw| 欧美黑人乱大交| 亚洲男人AV天堂午夜在| 通渭县| 国产裸体无遮挡免费精品| 亚洲国产欧美一区二区好看电影 | 高清无打码一区二区三区| 亚洲美女高潮不断亚洲| 成人3d动漫一区二区三区| 玩两个丰满老熟女久久网| 日本一道一区二区视频| 国产另类ts人妖一区二区| 日本伊人色综合网| 亚洲女同精品中文字幕|