java 缓存ByteBuffer

一、ByteBuffer的创建

ByteBuffer创建缓存区常用的有两种方式:

1、使用allocate直接创建指定大小的空缓存区

ByteBuffer buffer=ByteBuffer.allocate(64);

position: 0 limit: 64 capacity 64

2、使用wrap创建一个具有内容的缓存区

ByteBuffer b2=ByteBuffer.wrap("12345678".getBytes());

position: 0 limit: 8 capacity 8

 

二、将数据存放如缓存区

ByteBuffer存放数据方法为put(),存放数据position会进行递增操作,position最大为capacity。超出大小将抛出异常

 

三、从缓存区读取数据

get(),读取内容为position与limit之间的内容,每次读取position将回进行递增操作。超出大小将抛出异常

 

注意:

clear:

清除此缓冲区。将位置设置为 0,将限制设置为容量,并丢弃标记

此方法不能实际清除缓冲区中的数据,但从名称来看它似乎能够这样做,这样命名是因为它多数情况下确实是在清除数据时使用

使用clear方法只是将buffer的几个标识位重置,并没有将缓存中的数据清除,在使用中千万注意

 

flip:

首先将限制设置为当前位置,然后将位置设置为 0。如果已定义了标记,则丢弃该标记

flip方法是将position位置设定为limit位置,将position设置为0

 

remaining:

返回当前位置与限制之间的元素数

 

compact:

将缓冲区的当前位置和界限之间的字节(如果有)复制到缓冲区的开始处。即将索引 p = position() 处的字节复制到索引 0 处,将索引 p + 1 处的字节复制到索引 1 处,依此类推,直到将索引 limit() - 1 处的字节复制到索引 n = limit() - 1 - p 处。然后将缓冲区的位置设置为 n+1,并将其界限设置为其容量。如果已定义了标记,则丢弃它

compact方法就是将position与limit之间的数据移动到0到limit() - 1 - p处,将position设置为后面可用位置,limit设置为初始大小

 

将缓冲区的位置设置为复制的字节数,而不是零,以便调用此方法后可以紧接着调用另一个相对 put 方法。

从缓冲区写入数据之后调用此方法,以防写入不完整。例如,以下循环语句通过 buf 缓冲区将字节从一个信道复制到另一个信道:

buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值