NIO缓冲区(Buffer)的存取和常用方法

缓冲区的4个概念:

  1. position :当前位置
  2. mark :标记位置(可以reset直接跳到标记位置)
  3. limit :允许读取的位置
  4. capacity:缓冲区大小

缓冲区的使用相当于position的移动(最大到limit位置)每读多少就移动多少。 

import org.junit.jupiter.api.Test;

import java.nio.ByteBuffer;

public class BufferTest {
    /**
     * 存取过程
     */
    @Test
    public void saveAndRead(){
        String str="test save";
        //存过程
        ByteBuffer byteBuffer=ByteBuffer.allocate(1024);
        byteBuffer.put(str.getBytes());

        //取过程
        //首先切换模式flip()一下
        byteBuffer.flip();
        //创建一个数组
        byte[]dataStr=new byte[byteBuffer.limit()];
        byteBuffer.get(dataStr,0,2);//读取缓冲去的字符流到dataStr数组中起始位置0,读2个字节
    }

    /**
     * 常用方法
     */
    @Test
    public void methods(){

        //1.创建一个指定大学的缓冲区
        ByteBuffer byteBuffer=ByteBuffer.allocate(1024);

        //2.put方法存入数据
        byteBuffer.put("Hello world".getBytes());

        //3.切换读取模式
        byteBuffer.flip();

        //4.get方法读取缓冲区
        byte[] dataStr=new byte[byteBuffer.limit()];

        //5.rewind():可重复读
        byteBuffer.rewind();

        //6.clear清空缓冲区,缓冲区数据依然存在只是 位置被重新置0
        byteBuffer.clear();

        //7.标记 指针当前记录位置
        byteBuffer.mark();

        //8.回到标记位置
        byteBuffer.reset();

        /**
         * byteBuffer的4个概念
         * position,mark,limit,capacity
         * position <= mark <= limit <= capacity
         */
        byteBuffer.limit();
        byteBuffer.position();
        byteBuffer.capacity();

        //9.是否有剩余数据
        byteBuffer.hasRemaining();

    }
}

需要注意的是读取get方法通过传入的参数不同分别代表了不同的方式

get()读取一个字节

get(byte [] dst)读取字节到字节数组中

get(int index)从那个位置开始读

get(byte [] dst ,int offset,int length)读取字节到dst数组中,从offset开始读取length个字节

同理:getChar()

类似

 

 

 

 

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗水人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值