Java直接(堆外)内存使用详解(3)

输出为

刚写完数据 java.nio.DirectByteBuffer[pos=4 lim=10 cap=10] flip之后 java.nio.DirectByteBuffer[pos=0 lim=4 cap=10] 1 2 3 4 读取完数组 java.nio.DirectByteBuffer[pos=4 lim=4 cap=10] 常用方法

上面的读写例子中,有几个常用的方法:

clear()

这个方法用于清除mark和position,还有limit的位置:

public final Buffer clear() { position = 0; limit = capacity; mark = -1; return this; } flip()

这个方法主要用于改变当前的Position为limit,主要是用于读取操作。

public final Buffer flip() { limit = position; position = 0; mark = -1; return this; } compact()

这个方法在读取一部分数据的时候比较常用。
它会把当前的Position移到0,然后position+1移到1。

public ByteBuffer compact() { int pos = position(); int lim = limit(); assert (pos <= lim); int rem = (pos <= lim ? lim - pos : 0); unsafe.copyMemory(ix(pos), ix(0), rem << 0); position(rem); limit(capacity()); discardMark(); return this; }

比如一段空间内容为:

123456789

当position的位置在2时,调用compact方法,会变成:

345678989 isDirect()

这个方法用于判断是否是直接内存。如果是返回true,如果不是返回false。

rewind()

这个方法用于重置mark标记:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fbe8b70660561b393f5a9e9a939a8317.html