缓冲区的4个概念:
- position :当前位置
- mark :标记位置(可以reset直接跳到标记位置)
- limit :允许读取的位置
- 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()
类似