ByteBuffer的使用

本文详细解析了Java NIO中的ByteBuffer概念及其属性,包括内部数组、位置、标记、容量、限制等,并介绍了ByteBuffer的各种操作方法,如分配、包装、获取、放置等,以及特殊方法如clear、flip、rewind和compact,帮助读者掌握ByteBuffer的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

ByteBuffer:字节缓冲区

ByteBuffer的属性:

byte[] buff //buff即内部用于缓存的数组。

position //当前读取的位置。

mark //为某一读过的位置做标记,便于某些时候回退到该位置。

capacity //初始化时候的容量。

limit //当写数据到buffer中时

limit一般和capacity相等,当读数据时,limit代表buffer中有效数据的长度。

ByteBuffer的常规方法

ByteBuffer allocate(int capacity) //创建一个指定capacity的ByteBuffer。
ByteBuffer allocateDirect(int capacity) //创建一个direct的ByteBuffer,这样的ByteBuffer在参与IO操作时性能会更好
ByteBuffer wrap(byte [] array)
ByteBuffer wrap(byte [] array, int offset, int length) //把一个byte数组或byte数组的一部分包装成ByteBuffer。
//get put方法不多说
byte get(int index)
ByteBuffer put(byte b)
int getInt()             //从ByteBuffer中读出一个int值。
ByteBuffer putInt(int value)  // 写入一个int值到ByteBuffer中。

ByteBuffer的特殊方法

Buffer clear()    把position设为0,把limit设为capacity,一般在把数据写入Buffer前调用。
Buffer flip()    把limit设为当前position,把position设为0,一般在从Buffer读出数据前调用。
Buffer rewind()  把position设为0,limit不变,一般在把数据重写入Buffer前调用。
compact()       将 position 与 limit之间的数据复制到buffer的开始位置,复制后 position = limit -position,limit = capacity, 但如         果position 与limit 之间没有数据的话发,就不会进行复制。
mark() & reset()     通过调用Buffer.mark()方法,可以标记Buffer中的一个特定position。之后可以通过调用Buffer.reset()方法恢复到这个position。

图解ByteBuffer方法改变属性

put
写模式下,往buffer里写一个字节,并把postion移动一位。写模式下,一般limit与capacity相等。
flip
写完数据,需要开始读的时候,将postion复位到0,并将limit设为当前postion。
get
从buffer里读一个字节,并把postion移动一位。上限是limit,即写入数据的最后位置。
clear
将position置为0,并不清除buffer内容。
mark & reset
mark相关的方法主要是mark()(标记)和reset()(回到标记).


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值