异步编程:java nio 之 buffer原理与intBuffer示例demo

以下是应用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的内容被更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值