1.Buffer是什么?
NIO中所使用的缓冲区不是一个简单的byte 数组, 而是封装过的Buffer 类, 通过它提供的API , 我们可以灵活的操纵数据。
与Java 基本类型相对应, NIO 提供了多种Buffer 类型, 如ByteBuffer 、CharBuffer 、IntBuffer 等, 区别就是读写缓冲区时的单位长度不一样( 以对应类型的变量为单位进行读写) 。
2.核心buffer实现有哪些?
核心的buffer 实现有这些: ByteBuffer 、CharBuffer 、DoubIeBuffer 、FIoatBuffer 、IntBuffer 、
LongBuffer 、ShortBuffer, 涵盖了所有的基本数据类型( 4 类8 种, 除了Boolean ) 。也有其他的buffer 如MappedByteBuffer 。
3.buffer读写数据基本操作
1 ) 、将数据写Abuffer
2 ) 、调用buffer.flip()
3 ) 、将数据从buffer 中读取出来
4 ) 、调用buffer.clear() 或者buffer.compact()
在写buffer 的时候, buffer 会跟踪写入了多少数据, 需要读buffer 的时候, 需要调用伍p() 来将buffer 从写模式切换成读模式, 读模式中只能读取写入的数据, 而非整个buffero
当数据都读完了, 你需要清空buffer 以供下次使用, 可以有2 种方法来操作: 调用clear() 或者调用compact() 。
区别: clear 方法清空整个buffer , compact 方法只清除你已经读取的数据, 未读取的数据会被移到buffer 的开头, 此时写入数据会从当前数据的末尾开始。