Java ShortBuffer.capacity是否与其大小或长度相同

Java ShortBuffer.capacity是否与其大小或长度相同,java,Java,我可以使用容量来查找短缓冲区的实际大小或长度吗?根据我读到的内容,它返回缓冲区中包含的元素数。但“能力”这个词是如此含糊不清。如果我在这个缓冲区中放入一个由5个短路组成的数组,容量是否总是返回5?是。根据Buffer(它是ShortBuffer的超类): “缓冲区的容量是它包含的元素数。”是。根据Buffer(它是ShortBuffer的超类): “缓冲区的容量是它包含的元素数。”是,容量返回缓冲区中元素的最大数量。如果您以5的容量初始化它,它的容量将始终为5。当然,这并不意味着它必须包含5个元

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

是。根据
Buffer
(它是
ShortBuffer
的超类):


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

是。根据
Buffer
(它是
ShortBuffer
的超类):


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

是,容量返回缓冲区中元素的最大数量。如果您以5的容量初始化它,它的容量将始终为5。当然,这并不意味着它必须包含5个元素。

是的,容量返回缓冲区中元素的最大数量。如果您以5的容量初始化它,它的容量将始终为5。当然,这并不意味着它必须包含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
    }
}

当然,如果只使用所需的容量初始化缓冲区,则情况将是相同的。但是你需要理解两者之间的区别。如果您设想缓冲区是一张空行纸,则容量是指纸张上总共有多少行可用,而该位置将有效地显示下一个要写入的空行的位置。

否。容量是指缓冲区当前可以有效保存的数据量。这并不意味着写了那么多数据

如果你在一个容量更大的缓冲区中放置一个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
    }
}
当然,如果只使用所需的容量初始化缓冲区,则情况将是相同的。但是你需要理解两者之间的区别。如果您设想缓冲区是一张空行纸,那么容量就是纸上总共有多少行可用,而位置将有效地显示下一个要写入的空行的位置

如果我在这个缓冲区中放置一个5个短路的数组,容量是否总是返回5

我认为真正的答案是否定的。缓冲区的容量取决于分配缓冲区时提供的参数,而不是放入缓冲区的元素数量

缓冲区javadoc说:

缓冲区是一个线性有限序列 特定原语的元素 类型。除了内容之外 缓冲区的基本属性是 其容量、限制和位置:

  • 缓冲区的容量是它包含的元素数。容量 缓冲区的大小永远不会是负数和负数 永不改变

  • 缓冲区的限制是第一个不应包含的元素的索引 读或写。缓冲区的限制是 永不消极,永不伟大 而不是它的能力

  • 缓冲区的位置是要读取或删除的下一个元素的索引 书面的缓冲器的位置永远不会改变 消极的,永远不会大于它的 限制

虽然措辞有些不尽如人意,但我发现它可以包含的元素数量(
容量
)与当前包含的元素数量之间存在区别;通常在读取时
(限制-位置)
,或在写入时
位置

javadocs中的和方法加强了这一点。前者表示参数给出了缓冲区容量,而后者不表示
put
将更新缓冲区容量

(另一方面,您可以争辩说,缓冲区在任何时候都“包含”容量元素,但其中一些元素不是“有效”数据。)

如果我在这个缓冲区中放置一个5个短路的数组,容量是否总是返回5

我认为真正的答案是否定的。缓冲区的容量取决于分配缓冲区时提供的参数,而不是放入缓冲区的元素数量

缓冲区javadoc说:

缓冲区是一个线性有限序列 特定原语的元素 类型。除了内容之外 缓冲区的基本属性是 其容量、限制和位置:

  • 缓冲区的容量是它包含的元素数。容量 缓冲区的大小永远不会是负数和负数 永不改变

  • 缓冲区的限制是第一个不应包含的元素的索引 读或写。缓冲区的限制是 永不消极,永不伟大 而不是它的能力

  • 缓冲区的位置是要读取或删除的下一个元素的索引 书面的缓冲器的位置永远不会改变 消极的,永远不会大于它的 限制

虽然措辞有些不尽如人意,但我发现它可以包含的元素数量(
容量
)与当前包含的元素数量之间存在区别;通常在读取时
(限制-位置)
,或在写入时
位置

javadocs中的和方法加强了这一点。前者表示参数给出了缓冲区容量,而后者不表示
put
将更新缓冲区容量


(另一方面,您可以争辩说,缓冲区在任何时候都“包含”容量元素,但其中一些元素不是“有效”数据。)

Thanx!所以要澄清。如果我精确地分配我所需要的,然后将其用作只读缓冲区,那么容量将