ByteBuffer的限制和容量有什么区别?

时间:2014-04-18 06:33:45

标签: java

Java java.nio.ByteBuffer的限制和容量之间有什么区别?

3 个答案:

答案 0 :(得分:50)

最佳插图HERE in this article:根据模式,它们主要不同,

  • 写入模式中,容量和限制相同。
  • 但是在读取模式下限制意味着您可以从数据中读取的数据量的限制

enter image description here

答案 1 :(得分:27)

ByteBuffer没有length()方法。相反,它有几个类似长度的概念:

mark <= position <= limit <= capacity

capacity =在ByteBuffer内,有一个支持byte[]或类似行为的东西。容量是它的大小。容量将第一个槽索引到缓冲区末尾。

limit =填充缓冲区时,限制与容量相同。清空缓冲区时,它是缓冲区中最后一个填充字节的一个。

position =填充缓冲区时,位置指向缓冲区中填充的最后一个字节。清空缓冲区时,位置指向刚刚从缓冲区写入的最后一个字节。

mark该标记是一个可选书签,可让您在ByteBuffer中记录您想要稍后返回的有趣位置。当您使用mark()时,它会记录当前位置,当您致电reset()时,它会恢复该位置。

我希望这会有所帮助。此处还可以看到一个示例:http://mindprod.com/jgloss/bytebuffer.html

来源:Oracle Java Buffer reference - 请参阅&#39;不变量&#39;部分。

答案 2 :(得分:3)

容量是缓冲区的最大大小,它是在缓冲区创建时确定的,永不改变,limit是可以更改的实际大小。您无法读取或写入超出限制。

    ByteBuffer b= ByteBuffer.allocate(10); // capacity = 10, limit = 10
    b.limit(1);    //set limit to 1
    b.put((byte)1);
    b.put((byte)1); //causes java.nio.BufferOverflowException