nio包中主要經過下面兩個方面來提升I/O操做效率:異步
* 經過Buffer和Channel來提升I/O操做的速度。編碼
* 經過Selector來支持非阻塞I/O操做。spa
Channel 和 buffer 是 NIO 是兩個最基本的數據類型抽象。3d
Buffer:對象
是一塊連續的內存塊。blog
是 NIO 數據讀或寫的中轉地。接口
Channel:內存
數據的源頭或者數據的目的地io
用於向 buffer 提供數據或者讀取 buffer 數據 ,buffer 對象的惟一接口。效率
異步 I/O 支持
示例代碼:
向 ByteBuffer 中存放數據時須要考慮字符集的編碼(char-->byte)方式,讀取展現 ByteBuffer 數據時涉及對字符集解碼(byte-->char)。
Java.nio.charset 提供了編碼解碼一套解決方案。
以咱們最多見的 http 請求爲例,在請求的時候必須對請求進行正確的編碼。在獲得響應時必須對響應進行正確的解碼。