转载请注明出处:http://blog.csdn.net/kester_/article/details/71055727
ByteBuffer 使用与理解
一、ByteBuffer 是缓冲区,可用来减少物理磁盘的读写。
二、ByteBuffer 主要涉及到以下几个成员变量:
1.position
指针移动到的位置。在读或写时指针会跟着移动。
2.mark
标记特定未知。方便后面再次回到该位置。
3.limit
可以读或写的极限。介于0到容量中间。
4.capacity
容量。不变值。
三、ByteBuffer 主要涉及到以下几个方法:
1.get(byte[], int, int)
读取值到指定数组,指针会跟着移动。
2.put(byte[])
将数组写到缓冲区,指针会跟着移动。
3.clear()
重置缓冲区。将 positoin 置0,mark 置-1,limit 置为 capacity。
4.flip()
翻转缓冲区。缓冲区分为写状态或读状态,当写入一定内容后需要通过 get 读出来之前,可进行 flip() 翻转,此时 position 置0,mark 置-1,limit 置为 position (即之前写到的某个位置)。
5.position()
返回position。
6.mark()
标记当前位置,mark 置为 position。
7.remaining()
返回剩下可读或写的距离,limit - position。
8.reset()
回到之前标记的位置,position 置为 mark,需要先调用 mark() 才能调用。
9.array()
直接获取ByteBuffer里的数组,没写满情况下,比实际写的内容数组大。
10.capacity()
返回 capacity。
11.rewind()
缓冲区倒回。position 置0,mark置-1。
四、转换
0.声明变量
byte[] bytes
ByteBuffer buffer
1.byte[] 转 ByteBuffer
buffer = ByteBuffer.wrap(bytes);
// 使用这个方法后改动 buffer 或 bytes 都会联动改动到另一方。
2.ByteBuffer 转 byte[]
bytes = new byte[buffer.remaining()];
buffer.get(bytes, 0, bytes.length);