java.nio学习之Buffer

Buffer抽象类

  Buffer是java.nio包中的一个抽象类,Buffer中存储的数据为一种特定的基本数据类型,除了boolean基本类型外,每个基本类型都对应一个子类,其特点为线性、有限序列,Buffer有几个比较重要的属性,分别为capacity、limit、position、mark。
大小关系: mark <= position <= limit <= capacity

成员变量

  capacity:一个buffer的capacity表示其包含元素的数目,一旦buffer创建完成,其capacity将不会再变化,是固定的。
  limit:这个属性相当于规定了一个界限范围,超过这个界限的元素将不能被读或者写,limit是不会大于capacity的。
  position:position属相表示下一个可读或者写的元素,这个属性不会大于limit属性的值,初始值为0。
  mark:表示当调用reset方法时,position被重置的位置。但是mark的值可能是没有定义的,但是如果定义mark,那么肯定不能比position大,否则会产生异常。如果mark被定义之后,调整position和limit的值小于或者等于mark,那么mark将会失效。并且在mark未定义时,调用reset方法将会抛出异常。

操作方法

  Buffer类的每一个子类都有两种类型的get和put方法,当向buffer中读或者写一个或者多个数据后,buffer对象的position属性将会增加对应元素个数。当get或者put超过limit后那么将会引发一场。
  下面是一些操作方法,其中clear()、flip()、rewind()比较重要。
  clear操作将limit设置为capacity,position设置为0,以便可以channel读或者进行put操作。
  flip操作将limit设置为当前的position,position设置为0,这样之前读取过的位置就可以让channel写和或者重新get之前的数据。
  rewind操作知识将position变为0,可以重新读取数据。

任何Buffer都是可读的,但是不一定可写,关键是要根据isReadonly方法进行判断。

另外Buffer是线程不安全的,当多个线程同时访问buffer时,要使用同步。

Buffer除了一个函数要返回值之外,其他都返回buffer本身,可以链式调用。

    public final int capacity();
    public final int position();
    public final Buffer position(int newPosition);
    public final int limit();
    public final Buffer limit(int newLimit);
    public final Buffer mark();
    public final Buffer reset();
    public final Buffer clear();
    public final Buffer flip();
    public final Buffer rewind();
    public final int remaining();
    public final boolean hasRemaining();
    public abstract boolean isReadOnly();
    public abstract boolean hasArray();
    public abstract Object array();
    public abstract int arrayOffset();
    public abstract boolean isDirect();
    final int nextGetIndex();
    final int nextGetIndex(int nb);
    final int nextPutIndex();
    final int nextPutIndex(int nb);
    final int checkIndex(int i);
    final int checkIndex(int i, int nb);
    final int markValue();
    final void truncate();
    final void discardMark();
    static void checkBounds(int off, int len, int size);
    public int getElementSizeShift();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值