JavaNio之Buffer

简介

Java NIO类在jdk中有了源生支持,实现了一套自己的NIO框架,当然了底层依然是系统调用.但是在NIO中必不可少的就是缓冲区,随后的Channel和Selector随后在介绍.

原文地址

Buffer

在这里插入图片描述
这就是Buffer的大致继承体系,很多都没有罗列出来,因为主要讲解的是ByteBuffer.这里大概说一下,Buffer是一个抽象类,包括一个Buffer的最基本属性,比如,容量,位置,上界,标记.子类通过调用父类构造方法来实例化这几个参数,子类也都有各自的容量实现.比如ByteBuffer类用字节数组当缓冲区.旗下又有两个自己的实现类.
在jdk中,buffer有很多中实现,例如intBuffer,LongBuffer,ByteBuffer等,但是在NIO中实现的大多使用的是ByteBuffer,重点来看一下ByteBuffer.

Buffer属性以及相关操作.

属性 说明
capacity 容量 Buffer所能够存放的最大容量
position 位置 下一个被读或写的位置
limit 上界 可供读写的最大位置,用于限制position position < limit
mark 标记 标记位置,用于记录某次读写的位置,可以通过reset()方法回到这里

初始化:

ByteBuffer是一个抽象类,它有两个实现类,分别是上面图中显示的HeapByteBuffer和DirectByteBuffer.而且这两个类都不能被外部访问,都是包级的.而是应该通过allocate、allocateDirect 和 wrap 等方法初始化. 先看一下allocate方法:

public static ByteBuffer allocate(int capacity) {
   
        if (capacity < 0)
            throw new IllegalArgumentException();
        return new HeapByteBuffer(capacity, capacity);
}
 HeapByteBuffer(int cap, int lim) {
               // package-private
    super(-1, 0, lim, cap, new byte[cap], 0);
    // 这里又调用父类构造方法,也就是ByteBuffer的构造方法
 }

ByteBuffer(int mark, int pos, int lim, int cap,  
                 byte[] hb, int offset)
    {
   
        // 在调用顶级父类Buffer的构造方法
        super(mark, pos, lim, cap); 
        this.hb = hb;
        this.offset = offset;
    }


在来看一下Buffer的构造方法
Buffer(int mark, int pos, int lim, int cap) 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值