1、通道(Channel):用於源節點與目標節點的鏈接。在 Java NIO 中負責緩衝區中數據的傳輸。Channel 自己不存儲數據,所以須要配合緩衝區進行傳輸。
2、通道的主要實現類
java.nio.channels.Channel 接口:
|--FileChannel
|--SocketChannel
|--ServerSocketChannel
|--DatagramChannel
3、獲取通道
1. Java 針對支持通道的類提供了 getChannel() 方法
本地 IO:
FileInputStream/FileOutputStream
RandomAccessFile
網絡IO:
Socket
ServerSocket
DatagramSocket
2. 在 JDK 1.7 中的 NIO.2 針對各個通道提供了靜態方法 open()
3. 在 JDK 1.7 中的 NIO.2 的 Files 工具類的 newByteChannel()
4、通道之間的數據傳輸
transferFrom()
transferTo()
5、分散(Scatter)與彙集(Gather)
分散讀取(Scattering Reads):將通道中的數據分散到多個緩衝區中
彙集寫入(Gathering Writes):將多個緩衝區中的數據彙集到通道中
6、字符集:Charset
編碼:字符串 -> 字節數組
解碼:字節數組 -> 字符串
java
1、緩衝區(Buffer):在 Java NIO 中負責數據的存取。緩衝區就是數組。用於存儲不一樣數據類型的數據
根據數據類型不一樣(boolean 除外),提供了相應類型的緩衝區:
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
上述緩衝區的管理方式幾乎一致,經過 allocate() 獲取緩衝區
2、緩衝區存取數據的兩個核心方法:
put() : 存入數據到緩衝區中
get() : 獲取緩衝區中的數據
3、緩衝區中的四個核心屬性:
capacity : 容量,表示緩衝區中最大存儲數據的容量。一旦聲明不能改變。
limit : 界限,表示緩衝區中能夠操做數據的大小。(limit 後數據不能進行讀寫)
position : 位置,表示緩衝區中正在操做數據的位置。
mark : 標記,表示記錄當前 position 的位置。能夠經過 reset() 恢復到 mark 的位置
0 <= mark <= position <= limit <= capacity
4、直接緩衝區與非直接緩衝區:
非直接緩衝區:經過 allocate() 方法分配緩衝區,將緩衝區創建在 JVM 的內存中
直接緩衝區:經過 allocateDirect() 方法分配直接緩衝區,將緩衝區創建在物理內存中。能夠提升效率數組