内蒂 正在运行。
在章节中 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.arrayOffset()
返回此缓冲区的后备字节数组中第一个字节的偏移量。
arrayOffset() 中的方法 UnpooledHeapByteBuf.java 哪些实现了 ByteBuf 总是 刚刚回来 0
arrayOffset()
UnpooledHeapByteBuf.java
ByteBuf
0
@Override public int arrayOffset() { return 0; }
那么 ByteBuf#arrayOffset 无用的
ByteBuf#arrayOffset
ByteBuf 他们可能有更多 有用的
所以对于 UnpooledHeapByteBuf 返回 0 ByteBuf公司 这需要不同的实现。
UnpooledHeapByteBuf
ByteBuf公司
您可以想象,其他实现确实有一个偏移量,即 不同的 . 例如,如果他们使用 圆形阵列
在这种情况下,该方法需要返回 指数 开始指针 0 .
2 0
2
,如果你想 安全使用 你的 对象也应该使用该方法。如果你在手术中 未冷却的HEAPbytebuf 但即使这样,你也不应该这样做,因为它们可能会随着未来的版本而改变内部行为。
未冷却的HEAPbytebuf
不,这一点都没有用,因为它允许我们有一个巨大的字节数组来支持多个ByteBuf实现。这实际上是在 PooledHeapByteBuf