代码之家  ›  专栏  ›  技术社区  ›  wujunbin

是ByteBuf。arrayOffset无用?

  •  3
  • wujunbin  · 技术社区  · 7 年前

    内蒂 正在运行。

    在章节中 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() 方法该方法的文档如下:

    返回此缓冲区的后备字节数组中第一个字节的偏移量。

    arrayOffset() 中的方法 UnpooledHeapByteBuf.java 哪些实现了 ByteBuf 总是 刚刚回来 0

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

    那么 ByteBuf#arrayOffset 无用的

    2 回复  |  直到 7 年前
        1
  •  1
  •   Zabuzard Louis-Philippe Lebouthillier    7 年前

    ByteBuf 他们可能有更多 有用的

    所以对于 UnpooledHeapByteBuf 返回 0 ByteBuf公司 这需要不同的实现。


    您可以想象,其他实现确实有一个偏移量,即 不同的 . 例如,如果他们使用 圆形阵列

    在这种情况下,该方法需要返回 指数 开始指针 0 .

    2 0

    circular-array example


    ,如果你想 安全使用 你的 对象也应该使用该方法。如果你在手术中 未冷却的HEAPbytebuf 但即使这样,你也不应该这样做,因为它们可能会随着未来的版本而改变内部行为。

        2
  •  0
  •   Norman Maurer    7 年前

    不,这一点都没有用,因为它允许我们有一个巨大的字节数组来支持多个ByteBuf实现。这实际上是在 PooledHeapByteBuf