gpt4 book ai didi

java - ByteBuf.arrayOffset 没用吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:49:43 26 4
gpt4 key购买 nike

我正在学习 Netty 实战。

5.2.2 ByteBuf usage patterns一章中,有一段代码让我很困惑。如下所示。

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 中查找了 arrayOffset() 方法,它实现了 ByteBufalways 方法的实现仅返回 0,如下所示。

@Override
public int arrayOffset() {
return 0;
}

那么,ByteBuf#arrayOffset 是不是没用了?

最佳答案

ByteBuf 可能还有其他实现,它们可能有更有用甚至复杂的实现。

所以对于 UnpooledHeapByteBuf 返回 0 的情况,但这并不意味着 ByteBuf 的其他实现不需要不同的实现。


该方法应该按照文档 的规定执行,您可以想象其他实现确实有一个与0不同的偏移量。例如,如果他们使用像 circular-array 这样的东西作为支持字节数组。

在这种情况下,该方法需要返回当前开始指针 所在位置的索引,而不是0

这是一个示例图像,显示了这样一个圆形数组(当前指针位于索引 2 而不是 0,它在使用它时围绕数组移动) :

circular-array example


并且在用户端,如果您想安全地使用您的ByteBuf 对象,您也应该使用该方法。如果你在 UnpooledHeapByteBuf 上操作,你可以避免使用它,但即使那样你也不应该使用它,因为它们可能会在未来的版本中改变内部行为。

关于java - ByteBuf.arrayOffset 没用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45704388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com