package com.synda;
import org.junit.Test;
import java.nio.ByteBuffer;
/**
* 知识点:
* 1.缓冲区是NIO通信时,数据的载体
* 2.开发中,常用的缓冲区是ByteBuffer(字节缓冲区)
* 3.缓冲区的属性:capacity(容量),决定了存储容量的上限。一经决定,不能更改;
* 4.缓冲区的属性:limit(限制),限制的初始位置=capacity
* 5:缓冲区的属性:position(位置),初始位置是0;
* 6.ByteBUffer默认用的子类:headByteBuffer(堆内字节缓冲区);也就是说缓冲区是由jvm管理的
* 7.get方法会根据当前posiction的为止去取值;
*
*/
public class TestDemo {
@Test
public void create(){
//参数是
ByteBuffer byteBuffer = ByteBuffer.allocate(10);
System.out.println("");
}
@Test
public void put(){
//像缓冲区中插入数据
ByteBuffer buffer = ByteBuffer.allocate(10);
byte b1 = 1;
byte b2 = 2;
buffer.put(b1);
buffer.put(b2);
buffer.put("hello".getBytes());
System.out.println("");
}
@Test
public void get(){
/**
* get方法会根据当前posiction的为止去取值;、
* 此外,get方法没调一次,posication的位置也会往后移动一次
*
*/
ByteBuffer byteBuffer = ByteBuffer.allocate(10);
byte b1 = 1;
byte b2 = 2;
byte b3 = 3;
byteBuffer.put(b1);
byteBuffer.put(b2);
byteBuffer.put(b3);
//byteBuffer.position()获取当前的posication位置;
//设置limit限制位置;限制读到空数据;
byteBuffer.limit(byteBuffer.position());
//将posication放到初始位置
byteBuffer.position(0);
System.out.println(byteBuffer.get());
System.out.println(byteBuffer.get());
System.out.println(byteBuffer.get());
}
@Test
public void flip(){
ByteBuffer byteBuffer = ByteBuffer.allocate(10);
byte b1 = 1;
byte b2 = 2;
byte b3 = 3;
byteBuffer.put(b1);
byteBuffer.put(b2);
byteBuffer.put(b3);
//flip();反转缓冲区,切换到缓冲区的读模式相当于:
//byteBuffer.limit(byteBuffer.position());+ byteBuffer.position(0);
byteBuffer.flip();
System.out.println(byteBuffer.get());
System.out.println(byteBuffer.get());
System.out.println(byteBuffer.get());
System.out.println(byteBuffer.get());
}
@Test
public void wrap(){
/**
* wrap有两个作用:
* 1.会根据存入的字节大小创建对应大小的缓冲区,并写入数据;
* 此外,写完数据后会自动调用flip方法;
*/
ByteBuffer byteBuffer = ByteBuffer.wrap("hello".getBytes());
System.out.println("");
}
@Test
public void clear(){
/**
* clear()并不能真正的清除缓冲区数据,只是把position置为零
* 为了避免读到历史数据,一定别忘了调用flip;
*
*
*/
ByteBuffer byteBuffer = ByteBuffer.allocate(10);
byte b1 = 1;
byte b2 = 2;
byte b3 = 3;
byteBuffer.put(b1);
byteBuffer.put(b2);
byteBuffer.put(b3);
byteBuffer.clear();
byte b4 = 4;
byte b5 =5;
byteBuffer.put(b4);
byteBuffer.put(b5);
byteBuffer.flip();
System.out.println("");
}
@Test
public void hasRemaing(){
ByteBuffer byteBuffer =ByteBuffer.wrap("hello word".getBytes());
//hasRemaining()会判断limit何position之间是否还有元素可读
//如果有就返回true,如果没有,就返回false;
while (byteBuffer.hasRemaining()){
System.out.println(byteBuffer.get());
}
}
}
Buffer-Byte-Buffer
最新推荐文章于 2024-05-16 15:41:10 发布