Buffer 缓冲区
方法
- allocate() : 获取缓冲区(Boolean除外)
- put() : 存入数据到缓冲区
- get() : 获取缓冲区的数据
- flip() : 读数据模式
- rewind() : 可重复读
- clear() : 清空缓冲区,但是缓冲区中数据依然存在,处于“被遗忘”状态
- reset() : 将position恢复到mark的位置
- remaining() : position 到 limit 剩余的数据长度
- hasRemaining() : 判断是否还有可操作的数据
- isDirect() : 判断是否为直接缓冲区
四大核心属性:
- capacity : 容量,表示缓冲区中最大存储数据的容量。一旦声明不能修改。
- limit : 界限,表示缓冲区中可以操作数据的大小。(limit后数据不能进行读写)
- position : 位置,表示缓冲区中正在操作数据的位置。
- mark : 可以记录当前position的位置,通过reset()恢复到mark的位置
- 0 <= mark <= position <= limit <= capacity
直接缓冲区与非直接缓冲区
- 非直接缓冲区: 通过allocate()方法分配缓冲区, 将缓冲区建立在JVM的内存中
- 直接缓冲区:通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中。可以 提高效率
Channel通道
- 通道主要实现类
java.nio.channels.Channel接口: FileChannel、 SocketChannel、ServerSocketChannel、DatagramChannel
1.Java针对支持通道的类提供了getChannel()方法
2.JDK7 中的NIO.2针对各个通道提供了静态方法open()
3.JDK7 中的NIO.2的Files 工具类的newByteChannel()