@(技术博客)
定义
ByteBuffer类是在Java NIO中常常使用的一个缓冲区类,使用它可以进行高效的IO操作
其中,ByteBuffer主要有
(1)存储的内容
(2)bytebuffer的信息
mark——标记
position——位置
limit——限制
capacity——容量
0 <= 标记 <= 位置 <= 限制 <= 容量
操作
(1)对存储内容和bytebuffer的信息同时操作
1)mbytebuffer=Bytebuffer.allocate(int size);
注: 除boolean型外,char/int/short/long/float/double等,都提供了get/put方法,用于向ByteBuffer进行读写
a.参数:
size :就是capacity(其中capacity不变)
b.变化:
数据:木有
mark:-1
positon:0
limit=capacity
2)mbytebuffer.put(byte[] bytes);
a.参数:
从bytes获取数据放到mbytebuffer上
b.变化:
数据:存入bytes数据
mark:
position:假设length为bytes的长度,那么position=position+length
limit:limit=capacity
3)mbytebuffer.get(byte[] bytes, int offset, int length);
a.参数:
将bytes的position位置开始到position+length 的数据 放到 bytes上
其中,从bytes的第offset位开始放数据
b.变化:
数据:不变
mark:
position:position=position+length
limit:limit=capacity
(2)只对bytebuffer的信息进行操作:
1)mbytebuffer.mark()
a.变化:
mark=position
2)mbytebuffer.flip()
a.变化:
mark=-1
limit=position
position=0
3)mbytebuffer.clean()
a.变化:
mark=-1
limit=capacity
position=0
4)mbytebuffer.reset()
a.变化:
mark不变
position=mark
limit不变
5)mbytebuffer.rewind()
a.变化:
mark=-1
position=0
limit不变
(3)其他操作:
1)mbytebuffer.slice()
描述:创建新的字节缓冲区,其内容是此缓冲区内容的共享子序列。新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。新缓冲区的position将为零,其capacity和limit将为此缓冲区中所剩余的字节数量,其标记是不确定的。
2)duplicate()
描述: 创建共享此缓冲区内容的新的字节缓冲区。新缓冲区的内容将为此缓冲区的内容。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。新缓冲区的容量、界限、位置和标记值将与此缓冲区相同。
3)compact()
描述:将缓冲区的当前位置和界限之间的字节(如果有)复制到缓冲区的开始处。