ByteBuf.arrayOffset没用吗?
Is ByteBuf.arrayOffset useless?
我正在学习 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()
方法的用例是什么。该方法的文档如下:
Returns the offset of the first byte within the backing byte array of this buffer.
然后,我在UnpooledHeapByteBuf.java
中查找了实现ByteBuf
的arrayOffset()
方法。 always 方法的实现只是 returns 0
,如下所示。
@Override
public int arrayOffset() {
return 0;
}
所以,ByteBuf#arrayOffset
没用吗?
可能还有 ByteBuf
的其他实现,它们可能有更多 有用的 甚至 复杂的 实施。
所以对于 UnpooledHeapByteBuf
returning 0
的情况,但这并不意味着 ByteBuf
没有其他实现需要不同的实现.
该方法应该按照 文档 的规定执行,您可以想象其他实现确实有一个 与 不同的偏移量 0
。例如,如果他们使用类似 circular-array 的东西作为后备字节数组。
在这种情况下,该方法需要 return index 当前 start pointer 所在的位置而不是0
.
这是一个示例图像,显示了这样一个圆形数组(当前指针位于索引 2
而不是 0
,它在使用它时围绕数组移动):
并且在用户端,如果你想安全地使用你的ByteBuf
对象你也应该使用方法。如果你在 UnpooledHeapByteBuf
上操作,你可以避免使用它,但即使那样你也不应该使用它,因为它们可能会改变未来版本的内部行为。
不,它一点用都没有,因为它允许我们用一个巨大的字节数组支持多个 ByteBuf 实现。这实际上是在 PooledHeapByteBuf
中完成的
我正在学习 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()
方法的用例是什么。该方法的文档如下:
Returns the offset of the first byte within the backing byte array of this buffer.
然后,我在UnpooledHeapByteBuf.java
中查找了实现ByteBuf
的arrayOffset()
方法。 always 方法的实现只是 returns 0
,如下所示。
@Override
public int arrayOffset() {
return 0;
}
所以,ByteBuf#arrayOffset
没用吗?
可能还有 ByteBuf
的其他实现,它们可能有更多 有用的 甚至 复杂的 实施。
所以对于 UnpooledHeapByteBuf
returning 0
的情况,但这并不意味着 ByteBuf
没有其他实现需要不同的实现.
该方法应该按照 文档 的规定执行,您可以想象其他实现确实有一个 与 不同的偏移量 0
。例如,如果他们使用类似 circular-array 的东西作为后备字节数组。
在这种情况下,该方法需要 return index 当前 start pointer 所在的位置而不是0
.
这是一个示例图像,显示了这样一个圆形数组(当前指针位于索引 2
而不是 0
,它在使用它时围绕数组移动):
并且在用户端,如果你想安全地使用你的ByteBuf
对象你也应该使用方法。如果你在 UnpooledHeapByteBuf
上操作,你可以避免使用它,但即使那样你也不应该使用它,因为它们可能会改变未来版本的内部行为。
不,它一点用都没有,因为它允许我们用一个巨大的字节数组支持多个 ByteBuf 实现。这实际上是在 PooledHeapByteBuf
中完成的