ShortBuffer.capacity的大小或长度是否相同

时间:2010-11-14 09:21:04

标签: java

我可以使用容量来查找ShortBuffer的实际大小或长度吗?根据我的阅读,它返回缓冲区中包含的元素数量。但是“容量”这个词是如此含糊不清。如果我在这个缓冲区中放置一个5个短路的数组,容量总是会返回5?

4 个答案:

答案 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

“缓冲区的容量是它包含的元素数量。”