我可以使用容量来查找ShortBuffer的实际大小或长度吗?根据我的阅读,它返回缓冲区中包含的元素数量。但是“容量”这个词是如此含糊不清。如果我在这个缓冲区中放置一个5个短路的数组,容量总是会返回5?
答案 0 :(得分:5)
没有。容量是此时缓冲区有效可以保持的数据量。这并不意味着已经写了很多数据。
如果你将5个短裤阵列放在容量较大的缓冲区中,那么不会改变容量,但将改变位置。例如:
import java.nio.*;
public class Test {
public static void main(String[] args) throws Exception {
ShortBuffer buffer = ShortBuffer.allocate(100);
short[] data = new short[5];
buffer.put(data);
System.out.println(buffer.capacity()); // Prints 100
System.out.println(buffer.position()); // Prints 5
}
}
当然,如果您只使用所需的容量初始化缓冲区,那将是相同的。但你确实需要了解两者之间的区别。如果你想象缓冲区是一张空白的衬纸,那么容量就是纸上总共有多少行,而该位置将有效地显示下一个空白行的位置英寸
答案 1 :(得分:2)
是, capacity 返回缓冲区中的最大元素数。如果以容量5初始化它,它的容量将始终为5.当然,这并不意味着它必然包含5个元素。
答案 2 :(得分:2)
如果我在此缓冲区中放置一个包含5个短路的数组,容量是否总是返回5?
我认为真正的答案是否定的。缓冲区的容量由您在分配缓冲区时提供的参数确定,而不是您放入缓冲区的元素数。
缓冲区javadoc说:
缓冲区是线性有限序列 特定基元的元素 类型。除了它的内容, 缓冲区的基本属性是 它的能力,限制和位置:
缓冲区的容量是它包含的元素数。容量 缓冲区永远不会消极 永远不会改变。
缓冲区的限制是第一个不应该的元素的索引 读或写。缓冲区的限制是 永远不会消极,永远不会更大 而不是它的能力。
缓冲区的位置是要读取的下一个元素的索引或 书面。缓冲区的位置永远不会 消极的,永远不会超过它 限制。
虽然措辞有待改进,但我发现 / em>包含;阅读时通常为capacity
,写作时为(limit - position)
。
allocate(int)
和put(short)
方法的javadoc强化了这一点。前者声明参数给出了缓冲区容量,而后者没有声明position
将更新缓冲区容量。
(另一方面,您可以认为缓冲区确实“始终”包含“容量”元素,但其中一些元素不是“有效”数据。)
答案 3 :(得分:1)
是。根据{{1}}(Buffer
)的超类reference:
“缓冲区的容量是它包含的元素数量。”