final int arrayOffset()方法的作用:返回此缓冲区的底层实现数组中第一个缓冲区元素的偏移量,这个值在文档中标注为“可选操作”,也就是子类可以不处理这个值。该方法的内部源代码如下:
public final int arrayOffset() { if (hb == null) throw new UnsupportedOperationException(); if (isReadOnly) throw new ReadOnlyBufferException(); return offset; }
实例变量offset是在执行HeapByteBuffer类的构造方法时传入的,示例代码如下:
HeapByteBuffer(byte[] buf, int off, int len) { super(-1, off, off + len, buf.length, buf, 0); }
最后一个参数0就是对ByteBuffer类的offset实例变量进行赋值,源代码如下:
ByteBuffer(int mark, int pos, int lim, int cap, // 包级访问 byte[] hb, int offset) { super(mark, pos, lim, cap); this.hb = hb; this.offset = offset; }
示例代码如下:
public class Test15 { public static void main(String[] args) { byte[] byteArray = new byte[] { 1, 2, 3 }; ByteBuffer bytebuffer = ByteBuffer.wrap(byteArray); System.out.println("bytebuffer.arrayOffset=" + bytebuffer.arrayOffset()); } }
程序运行结果如下:
bytebuffer.arrayOffset=0
在上面的示例中,不管怎么进行操作,arrayOffset()方法的返回值永远是0,非0的情况将在后面的章节介绍。