ByteBuffer 是 Java NIO 中常常使用的一个字节缓冲区类。合理的使用它可以进行高效的IO操作。
创建ByteBuffer
1)使用allocate()静态方法
ByteBuffer buffer=ByteBuffer.allocate(256);
以上代码为创建一个256字节的缓冲区。缓冲区创建后不可更改,如果想改变大小唯一的方法只有重新创建一个更大的。
2)通过包装一个已有的数组来创建
byte[] byteArray = new byte[64];
ByteBuffer buffer = ByteBuffer.wrap(byteArray);
该段代码将生成一个缓冲区,对缓冲区的操作将导致数组被修改,反之亦然。新缓冲区的capacity和limit将被设置为字节数组的长度(byteArray.length),position 为0 并且mark没有标记(默认为-1)。
ByteBuffer的读写方法read 和 write
写方法主要有:put() 参数为byte 、byte[] 或者ByteBuffer等多个重载方法。还有几个基础类型写入putInt(), putShort(), putLong(), putChar(), putFloat(), putDouble(),但是ByteOrder( BIG_ENDIAN 或 LITTLE_ENDIAN,参见)不同这些基础类型的写入结果会有所不同。
读方法与写方法基本对应,主要为get(),可以获取单字节、多字节,可以按照ByteOrder获取基本类型。
ByteBuffer的基本操作
基本操作主要有如下几个方法:position(),limit(),capacity(),mark(),reset(),flip(),rewind(),compact()。
position有两个对应方法,一个带参,一个不带参。带参的方法为设置position的值,不带参的方法为获取position的值。
limit 与position类似拥有两个方法,可以设置limit的值,一个获取limit的值。
capacity 仅有一个获取capacity值的无参方法。
mark() 方法可以再某一读过的位置做一个标记以方便后面可以回退到该位置。
reset() 回退到前面mark()标记的位置。
flip() 将缓冲区由写状态转换为读状态。
rewind() 回退这个缓冲区。位置被设置为零,标记被丢弃。
compact() 压缩这个缓冲区。缓冲区被标记为写状态,position值为压缩前剩余待读内容的长度,limit值为缓冲区大小capacity。