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

缓冲区的4个概念:

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

NIO缓冲区(Buffer)的存取和常用方法_第1张图片

缓冲区的使用相当于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()

类似

 

 

 

 

 

你可能感兴趣的:(#,NIO,(New,Input,Output))