Java NIO 入門
阿新 • • 發佈:2018-12-25
NIO與傳統IO的區別
- 相同點:都是負責輸入輸出的;
- 區別:效率高低上,NIO比IO要快很多。
NIO為什麼比IO快
- IO是以流一次一個位元組的處理資料,一個輸入流產生一個位元組的資料,一個輸出流消費一個位元組的資料。
- NIO是以塊的形式處理資料,每一個操作都在一步中產生或者消費一個數據塊。按塊處理資料比按(流式的)位元組處理資料要快得多。
NIO的用法
通道和緩衝區
通道 和 緩衝區 是 NIO 中的核心物件,幾乎在每一個 I/O 操作中都要使用它們。
(具體細節可以看看IBM的那篇文章)
NIO具體操作
以讀檔案為例:
- 建立InputStream物件開啟檔案;
- 從InputStream中獲取Channel;
- 建立Buffer物件;
- 用第二步的Channel操作第三步的Buffer物件;
以寫檔案為例
- 建立OutputStream物件開啟檔案;
- 從OutputStream中獲取Channel;
- 建立Buffer物件;
- 用第二步的Channel操作第三步的Buffer物件;
讀寫結合
Buffer物件,clear() 方法重設緩衝區,使它可以接受讀入的資料。 flip() 方法讓緩衝區可以將新讀入的資料寫入另一個通道。
Buffer緩衝區的內部實現與高階用法(分片、共享)
看IBM文件吧
聯網和非同步IO
用法:Selectors物件的使用,ServerSocketChannel物件的使用;
字符集
NIO對不同字符集也有考慮。