1. 程式人生 > >NIO知識點簡單記錄一

NIO知識點簡單記錄一

一:NIO簡介

  1. 簡介
                
  2. NIO和IO主要的區別
      
  3. 通道和緩衝區
      

二:NIO中的緩衝區

  1.    簡介
             
           緩衝區在java NIO中就是負責資料的存取,緩衝區就是陣列,用於儲存不同型別的資料。
           並且根據資料型別不同(boolean除外),我們可以使用不同型別的緩衝區。例如:
           ByteBuffer(這個最常用),CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,
           DoubleBuffer等。並且上面這幾種緩衝區的管理方式幾乎一致,通過allocate()獲取緩衝區。
  2. 緩衝區存取資料的兩個核心方法
       a:put()  -----> 表示存入資料到緩衝區
       b:get()  ----->表示獲取緩衝區中的資料
       c:ByteBuffer.allocate(1024).hasRemaining(); 表示判斷緩衝區中是否還有可以獲取的資料
  3. 緩衝區中的四大核心屬性
       a:capacity
             表示容量,表示緩衝區中最大儲存資料的容量。一旦宣告就不能改變。
       b:limit
             表示界限,表示緩衝區中可以操作資料的大小。(limit後資料不能讀寫)
       c:position
             表示位置,表示緩衝區中正在操作資料的位置。
       d:mark
             表示標記,用來記錄當前position的位置,可以通過reset()方法恢復到mark標記的位置。
        
       0 <= position <= limit <= capacity
       
  4. 不同情況下緩衝區的各個屬性值
     a:程式碼示例
          
          
          
      b:效果
          
          
      c:解析圖
         
    c:mark標記的相關示例
         
        
       效果:
         

三:NIO直接緩衝區和非直接緩衝區

  1. 什麼是直接緩衝區和非直接緩衝區?
     直接緩衝區:就是通過allocate()方法分配的緩衝區,是將緩衝區建立在JVM的記憶體中。
     非直接緩衝區:就是通過allocateDirect()方法分配的緩衝區,將緩衝區分配在實體記憶體中。
       (實體記憶體就是你的記憶體條的實際記憶體,虛擬記憶體是設在硬碟上用作記憶體的虛擬的記憶體)              

四: NIO通道(Channel)的原理與獲取

  1.  什麼是通道?
            
     總結:
              通道就是用於源節點和目標節點的連結。在java NIO中負責緩衝區中資料的傳輸,Channel本身
              不儲存資料,因此需要配合緩衝區進行傳輸。

五: 相關檔案操作例項

  1.  使用通道完成jpg格式照片的複製(使用的是非直接緩衝區)
      a:程式碼如下
            
      b:效果
           
  2. 使用通道完成jpg格式照片的複製(使用的是直接緩衝區)
     a:程式碼(這種方式效率雖然高,但是它無法及時釋放記憶體,可能會導致實體記憶體被佔用過多)
        
     b:效果
        
  3. 通道之間的資料傳輸(直接緩衝區的方法)
     a:程式碼
        
     效果:
       
          

六:   分散讀取與聚集寫入

  1. 什麼是分散讀取和聚集寫入
     a:分散讀取:將通道中的資料分散到多個緩衝區中
                       
                
     b:聚集寫入:將多個緩衝區中的資料聚集到通道中        
                       
                

 

文章目錄