Java NIO(1)Buffer类

好吧之前的collection都写的太随意了,基本只是把代码拷贝到博客上

这次就认认真真的解读一下代码吧

 

先来说说nio的buffer,是bytebuffer等类的虚基类,类里面很多就是用来抛异常的方法就不谈了

然后大部分方法都是返回this,这样就可以链式调用

几个成员变量

capacity 表示buffer的容量

limit表示读/写的上限,读的上限就是之前写的最后一个字符,写的上限就是容量

position当前的位置,读就表示读到哪一个,写就表示写到哪一个

mark,记下的posotion,可以通过一些方法回到之前保存的position

 

Buffer limit(int newLimit)方法,传入int newLimit

先对参数判断合法性,如果新的limit为负数或比容量大就抛出异常。

然后给limit成员变量赋值

如果新的limit比position小,那么把position设为limit

如果新的limit比mark小,那么mark设为-1

然后就返回了

 

Buffer position(int newPosition)方法,传入newPostion

如果新的position比limit大 按位或 新的position小于零则抛出异常,这里的按位或没怎么看懂

设置position

如果mark比position还大,那么mark变成-1

返回

 

 

构造函数Buffer(int mark, int pos, int lim, int cap)

判断cap小于0的时候抛出异常

先设置cap

然后调用limit方法设置limit

调用position方法设置pos

判断mark >= 0 时,如果mark比pos还大,抛出异常,否则设置mark

 

int capacity()方法

返回capacity

 

Int position()方法

返回position

 

Int limit()方法

返回limit

 

Buffer mark()方法

将mark设为position

记下当前的位置

 

Buffer reset()方法

当前mark为负数抛异常

将position设为mark

就是回到之前保存的位置嘛

 

Buffer clear()方法

将position设为0

Limit设为capacity

Mark设为-1

只是掩耳盗铃的从头开始了,内部的数据根本没有动过……不过这样效率的确高

 

Buffer flip()方法

Limit赋值为position

Position赋值为0

Mark赋值为-1

感觉这个方法只是用来从写到读的翻转,没有从读到写的翻转啊

 

Buffer rewind()方法

Position为0

Mark为-1

这个方法没有修改limit

 

final int remaining()方法

返回limit - position也就是还剩下多少位置,读的话就是剩下多少没读,写就是剩下多少可以写

 

final boolean hasRemaining()方法

返回position < limit

因为position <= limit嘛,等于的时候就是满了

 

abstract boolean isReadOnly()

表示该buffer是否只读

 

abstract boolean hasArray()

判断此缓冲区是否由可访问的数组支持

如果返回true,那么array()方法可以被安全的调用

 

abstract Object array()

返回支持这个buffer的数组

 

abstract int arrayOffset()

返回此缓冲区的缓冲区第一个元素的后备数组中的偏移量

如果此缓冲区由数组支持,则缓冲区位置对应于数组索引

 

abstract boolean isDirect()

表示这个buffer是否直接的

 

abstract Buffer slice()

创建一个新buffer,其内容是此buffer内容的共享子序列

新buffer的内容将从此buffer的当前position开始。 对此buffer内容的更改将在新buffer中显示,反之亦然; 两个buffer的position,limit和mark将是独立的

新buffer的position将为零,其capacity和limit将是此buffer中剩余的元素数,其mark将是未定义的。 当且仅当此buffer是直接buffer时,新buffer将是直接的,并且当且仅当此buffer是只读时,它才是只读的

 

abstract Buffer duplicate()方法

创造一个共享当前buffer内容的buffer(大概就是返回一个引用?)

新buffer的内容将是此buffer的内容。 对此buffer内容的更改将在新buffer中显示,反之亦然; 两个buffer的position,limit和mark将是独立的。

  新buffer的capacity,limit,position和mark将与此buffer的capacity,limit,position和mark相同。 当且仅当此buffer是直接缓冲区时,新buffer将是直接的,并且当且仅当此buffer是只读时,它才是只读的。

 

abstract Object base()方法

基本引用,与地址字段配对,它可以用于组合buffer或直接字节buffer(以及视图)的不安全访问

 

final int nextGetIndex()方法

如果position >= limit,那么直接抛异常(都已经到上限了还怎么下一个嘛)

返回position++

 

final int nextGetIndex(int nb)方法,就是返回当前position,然后把position向前位移nb个位置

如果limit - position < nb抛出异常()

然后记录position

Position向前位移nb个位置

返回记录好的position

 

final int nextPutIndex()方法

同上

 

final int nextPutIndex(int nb)

同上

 

final int checkIndex(int i)方法 看看目标下标是否合法

如果i小于0或者大于等于limit,抛出异常

如果是合法就返回i

 

final int checkIndex(int i, int nb)方法 看看从i开始

如果i 小于0或者nb大于limit - i抛出异常

合法返回i

 

final int markValue()方法

返回mark

 

final void truncate()方法

Mark为-1

Position为0

Limit为0

Capacity为0

 

final void discardMark()方法

Mark为-1

 

static void checkBounds(int off, int len, int size)方法

当off、len、off + len、 size - off - len为负数时抛出异常

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值