1. 程式人生 > >Java NIO 入門

Java NIO 入門

NIO與傳統IO的區別

  • 相同點:都是負責輸入輸出的;
  • 區別:效率高低上,NIO比IO要快很多。

NIO為什麼比IO快

  1. IO是以流一次一個位元組的處理資料,一個輸入流產生一個位元組的資料,一個輸出流消費一個位元組的資料。
  2. NIO是以塊的形式處理資料,每一個操作都在一步中產生或者消費一個數據塊。按塊處理資料比按(流式的)位元組處理資料要快得多。

NIO的用法

通道和緩衝區

通道緩衝區 是 NIO 中的核心物件,幾乎在每一個 I/O 操作中都要使用它們。
(具體細節可以看看IBM的那篇文章)

NIO具體操作

  • 以讀檔案為例:

    1. 建立InputStream物件開啟檔案;
    2. 從InputStream中獲取Channel;
    3. 建立Buffer物件;
    4. 用第二步的Channel操作第三步的Buffer物件;
  • 以寫檔案為例

    1. 建立OutputStream物件開啟檔案;
    2. 從OutputStream中獲取Channel;
    3. 建立Buffer物件;
    4. 用第二步的Channel操作第三步的Buffer物件;
  • 讀寫結合
    Buffer物件,clear() 方法重設緩衝區,使它可以接受讀入的資料。 flip() 方法讓緩衝區可以將新讀入的資料寫入另一個通道。

Buffer緩衝區的內部實現與高階用法(分片、共享)

看IBM文件吧

聯網和非同步IO

用法:Selectors物件的使用,ServerSocketChannel物件的使用;

字符集

NIO對不同字符集也有考慮。