So where is the implementation of the getInt() method?
ByteBuffer确实是一个抽象类.有几种方法可以创建字节缓冲区:
在我的JDK中,这些创建了内部类HeapByteBuffer和DirectByteBuffer的实例.它们各自的getInt函数如下:
// HeapByteBuffer
public int getInt() {
return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
}
public int getInt(int i) {
return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
}
和
// DirectByteBuffer
private int getInt(long a) {
if (unaligned) {
int x = unsafe.getInt(a);
return (nativeByteOrder ? x : Bits.swap(x));
}
return Bits.getInt(a, bigEndian);
}
public int getInt() {
return getInt(ix(nextGetIndex((1 << 2))));
}
public int getInt(int i) {
return getInt(ix(checkIndex(i, (1 << 2))));
}
在上面,nativeByteOrder和bigEndian是两个布尔成员,分别指示 – 并且有点冗余 – 是否配置的字节顺序:(a)匹配本机字节顺序; (b)是大端.