我正在学习 Netty实战。
在第5.2.2节 ByteBuf使用模式中,有一段代码让我感到困惑。如下所示。
ByteBuf heapBuf = ...
if (heapBuf.hasArray()) {
byte[] array = heapBuf.array();
int offset = heapBuf.arrayOffset() + heapBuf.readerIndex();
int lenght = heapBuf.readableBytes();
handleArray(array, offset, length)
}
我想知道
ByteBuf.arrayOffset()
方法的用途。该方法的文档如下:
然后,我查看了实现返回此缓冲区的支撑字节数组中第一个字节的偏移量。
ByteBuf
的UnpooledHeapByteBuf.java
中的arrayOffset()
方法。如下所示,该方法的实现始终返回0
。@Override
public int arrayOffset() {
return 0;
}
所以,
ByteBuf#arrayOffset
是无用的吗?
ByteBuf
可能有其他实现方式,而且可能存在更加有用或者复杂的实现方式。所以对于UnpooledHeapByteBuf
返回0
是这种实现方式的结果,但这并不意味着没有其他的ByteBuf
实现方式。该方法应该按照文档说明执行,你可以想象其他实现方式确实具有与0
不同的真正偏移量。 - Zabuzard