JAVA NIO ByteBuffer详解

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。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值