以下是应用java nio中的 IntBuffer编写的一个示例demo:
public class IntBufferDemo {
private final static Integer NUM = 5 ;
public static void main(String[] args) {
// 分配buffer缓冲区
IntBuffer buffer = IntBuffer.allocate(1024);
// 往buffer中写入数据
for (int i=0;i<NUM;++i){
buffer.put(i) ;
}
// 开始读buffer
buffer.flip() ;
while (buffer.hasRemaining()){
int data = buffer.get() ;
System.out.print(data + " ");
}
}
}
运行的结果如下:
那么buffer缓冲区是怎么运行的呢?它的原理是什么?
在以上示例代码中使用到了 nio buffer中的 IntBuffer去进行一个简单的读写操作,通过put方法和get方法对buffer缓冲区中的内容进行更改,在缓冲区中有几个比较重要的属性,具体内容如下:
position
: 当前读写指针所在的位置
capacity
:缓冲区的容量
limit
:指出还有多少数据可以取出或者是还有多少数据可以放入缓冲区中去
缓存切片:
java nio有缓存切片的概念,缓存切片实际上就是对原有缓存的一个映射,相当于是原缓存的视图,并且与原缓存的数据是共享的:代码示例如下:
public class BufferSlice {
private final static Integer NUM = 9 ;
public static void main(String[] args) {
// 创建原缓冲区
ByteBuffer byteBuffer = ByteBuffer.allocate(10) ;
for (int i=0;i<=NUM;i++){
byteBuffer.put((byte) i) ;
}
// 分配一个新的缓存切片 3 --- 6
byteBuffer.limit(7);
byteBuffer.position(3) ;
ByteBuffer slice = byteBuffer.slice() ;
// 对缓存切片进行改造
for (int i=0;i<slice.capacity();i++){
byte d = slice.get(i);
d = (byte)(d*10) ;
slice.put(i,d) ;
}
// 从头开始读
byteBuffer.limit(byteBuffer.capacity());
byteBuffer.position(0);
while (byteBuffer.hasRemaining()){
System.out.print(byteBuffer.get()+" ");
}
}
}
代码运行结果如下图所示:
可以看到,下标3到6的内容被更改