Buffer基本理解-N3112

package Netty与NIO的前生今世3;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Buffer的基本理解
 *   缓冲区对象本质上一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,
 *   能够跟踪记录和缓冲区的状态变化情况,如果我们使用get方法从缓冲区获取数据或是
 *   使用put方法把数据写入缓冲区的状态变化情况,都会引起缓冲区状态的变化
 *
 *   缓冲区的三个重要属性
 *  1)position:指定下一个将要被写入或者读取的元素索引,它的值有get/put方法自动更新,在
 *     创建一个Buffer对象时,position被初始化为0.
 *
 *  2) limit:指定还有多少数据需要读取(从缓冲区写入通道时),或者还有多少空间可以写入数据(从通道读入缓冲区
 *
 *  3)capacity:指定了可以存储在缓冲区中的最大数据容量,实际上,它是指定底层数组的大小,
 *     或者至少是指定了准许我们使用的底层数组容量。
 *
 *
 */
class BufferDemo{
    public BufferDemo() throws IOException {
        //这里用的是文件I/O处理
        FileInputStream fileInputStream=new FileInputStream("C:\\IO\\io.txt\\001.txt");

        //创建文件的操作管道
        FileChannel fileChannel=fileInputStream.getChannel();

        //分配一个10个大小的缓冲区,其实就是分配一个10大小的Byte数组
        ByteBuffer byteBuffer=ByteBuffer.allocate(10);
        output("初始化",byteBuffer);

        //先读一下
        fileChannel.read(byteBuffer);
        output("调用read()",byteBuffer);

        //准备操作之前,先锁定操作范围
        byteBuffer.flip();
        output("调用flip()",byteBuffer);

        //判断有没有可读数据
        while (byteBuffer.remaining()>0){
            byte b =byteBuffer.get();
            System.out.println((char)b);
        }
        output("调用get()",byteBuffer);

        //可以理解为解锁
        byteBuffer.clear();
        output("调用clear()",byteBuffer);

        //最后把管道封闭
        fileChannel.close();

    }

    private void output(String step, Buffer buffer) {
        System.out.println(step+" : ");
        //容量,数组大小
        System.out.println("capacity:"+buffer.capacity()+",");
        //当前操作数据所在位置,也可以叫做游标
        System.out.println("position:"+buffer.position()+",");
        //锁定值,flip,数据操作范围索引只能在position-limit之间
        System.out.println("limit:"+buffer.limit());
        System.out.println();
    }
}
public class N3112 {
    public static void main(String[] args) throws IOException {
        BufferDemo bufferDemo =new BufferDemo();
    }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值