Java java.nio.ByteBuffer的限制和容量之间有什么区别?
答案 0 :(得分:50)
答案 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