模块  java.base
软件包  java.nio

Class FloatBuffer

  • 实现的所有接口
    Comparable<FloatBuffer>

    public abstract class FloatBuffer
    extends Buffer
    implements Comparable<FloatBuffer>
    浮动缓冲区。

    此类在浮点缓冲区上定义了四类操作:

    • 绝对和相对getput读取和写入单个浮点数的方法;

    • 相对bulk get方法,将连续的浮点数序列从此缓冲区转移到数组中;

    • 相对bulk put方法,将浮点数的浮点数或其他浮点缓冲区中的连续浮点数转移到此缓冲区中;

    • compacting浮点缓冲区的方法。

    浮点缓冲区可以由allocation创建,它为缓冲区的内容分配空间,通过wrapping将现有的浮点数组分配到缓冲区,或者创建现有字节缓冲区的view

    像字节缓冲区一样,浮点缓冲区是direct or non-direct 通过wrap方法创建的浮点缓冲区将是非直接的。 当且仅当字节缓冲区本身是直接的时,作为字节缓冲区视图创建的浮动缓冲区才是直接的。 可以通过调用isDirect方法来确定浮动缓冲区是否是直接的。

    此类中没有返回值的方法被指定为返回调用它们的缓冲区。 这允许链接方法调用。

    从以下版本开始:
    1.4
    • 方法详细信息

      • allocate

        public static FloatBuffer allocate​(int capacity)
        分配一个新的浮动缓冲区。

        新缓冲区的位置将为零,其限制将是其容量,其标记将是未定义的,其每个元素将初始化为零,其字节顺序将为底层硬件的native order 它将有一个backing array ,其array offset将为零。

        参数
        capacity - 新缓冲区的容量,以浮点数表示
        结果
        新的浮动缓冲区
        异常
        IllegalArgumentException - 如果 capacity是负整数
      • wrap

        public static FloatBuffer wrap​(float[] array,
                                       int offset,
                                       int length)
        将float数组包装到缓冲区中。

        新缓冲区将由给定的float数组支持; 也就是说,对缓冲区的修改将导致数组被修改,反之亦然。 新缓冲区的容量将为array.length ,其位置将为offset ,其限制将为offset + length ,其标记将是未定义的,其字节顺序将为底层硬件的native order 它的backing array将是给定的数组,其array offset将为零。

        参数
        array - 将备份新缓冲区的数组
        offset - 要使用的子阵列的偏移量; 必须是非负数且不大于array.length 新缓冲区的位置将设置为此值。
        length - 要使用的子阵列的长度; 必须是非负数且不大于array.length - offset 新缓冲区的限制将设置为offset + length
        结果
        新的浮动缓冲区
        异常
        IndexOutOfBoundsException - 如果 offsetlength参数的前提条件不成立
      • wrap

        public static FloatBuffer wrap​(float[] array)
        将float数组包装到缓冲区中。

        新缓冲区将由给定的float数组支持; 也就是说,对缓冲区的修改将导致数组被修改,反之亦然。 新缓冲区的容量和限制将为array.length ,其位置将为零,其标记将是未定义的,其字节顺序将为底层硬件的native order 它的backing array将是给定的数组,其array offset将为零。

        参数
        array - 将支持此缓冲区的数组
        结果
        新的浮动缓冲区
      • slice

        public abstract FloatBuffer slice()
        创建一个新的浮点缓冲区,其内容是此缓冲区内容的共享子序列。

        新缓冲区的内容将从此缓冲区的当前位置开始。 对此缓冲区内容的更改将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。

        新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的浮点数,其标记将是未定义的,其字节顺序将与此缓冲区的字节顺序相同。 当且仅当此缓冲区是直接缓冲区时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读时,它才是只读的。

        Specified by:
        slice在类 Buffer
        结果
        新的浮动缓冲区
      • duplicate

        public abstract FloatBuffer duplicate()
        创建一个共享此缓冲区内容的新浮点缓冲区。

        新缓冲区的内容将是此缓冲区的内容。 对此缓冲区内容的更改将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。

        新缓冲区的容量,限制,位置,标记值和字节顺序将与此缓冲区的容量,限制,位置,标记值和字节顺序相同。 当且仅当此缓冲区是直接缓冲区时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读时,它才是只读的。

        Specified by:
        duplicateBuffer
        结果
        新的浮动缓冲区
      • asReadOnlyBuffer

        public abstract FloatBuffer asReadOnlyBuffer()
        创建一个共享此缓冲区内容的新的只读浮点缓冲区。

        新缓冲区的内容将是此缓冲区的内容。 对此缓冲区内容的更改将在新缓冲区中可见; 但是,新缓冲区本身将是只读的,不允许修改共享内容。 两个缓冲区的位置,限制和标记值将是独立的。

        新缓冲区的容量,限制,位置,标记值和字节顺序将与此缓冲区的容量,限制,位置,标记值和字节顺序相同。

        如果此缓冲区本身是只读的,则此方法的行为方式与duplicate方法完全相同。

        结果
        新的只读浮点缓冲区
      • get

        public abstract float get()
        相对get方法。 在此缓冲区的当前位置读取浮点数,然后递增位置。
        结果
        浮动在缓冲区的当前位置
        异常
        BufferUnderflowException - 如果缓冲区的当前位置不小于其限制
      • put

        public abstract FloatBuffer put​(float f)
        相对put方法(可选操作)

        将给定的float写入当前位置的缓冲区,然后递增位置。

        参数
        f - 要写入的浮点数
        结果
        这个缓冲区
        异常
        BufferOverflowException - 如果此缓冲区的当前位置不小于其限制
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • get

        public abstract float get​(int index)
        绝对获取方法。 读取给定索引处的浮点数。
        参数
        index - 将从中读取浮点数的索引
        结果
        给定索引处的浮点数
        异常
        IndexOutOfBoundsException - 如果 index为负数或不小于缓冲区的限制
      • put

        public abstract FloatBuffer put​(int index,
                                        float f)
        绝对(可选操作)

        将给定的float写入给定索引处的此缓冲区。

        参数
        index - 将写入float的索引
        f - 要写入的浮点值
        结果
        这个缓冲区
        异常
        IndexOutOfBoundsException - 如果 index为负数或不小于缓冲区的限制
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • get

        public FloatBuffer get​(float[] dst,
                               int offset,
                               int length)
        相对批量获取方法。

        此方法将浮动从此缓冲区传输到给定的目标阵列。 如果缓冲区中剩余的浮点数少于满足请求所需的浮点数,即length > remaining() ,则不会传输任何浮点数并抛出BufferUnderflowException

        否则,此方法将length浮动从此缓冲区复制到给定数组中,从此缓冲区的当前位置开始并在阵列中的给定偏移处开始。 然后,此缓冲区的位置增加length

        换句话说,调用src.get(dst, off, len)形式的此方法与src.get(dst, off, len)具有完全相同的效果

           for (int i = off; i < off + len; i++) dst[i] = src.get();  
        除了它首先检查此缓冲区中是否有足够的浮点数,它可能更有效。
        参数
        dst - 要写入浮点数的数组
        offset - 要写入的第一个浮点数组中的偏移量; 必须是非负数且不大于dst.length
        length - 要写入给定数组的最大浮点数; 必须是非负数且不大于dst.length - offset
        结果
        这个缓冲区
        异常
        BufferUnderflowException - 如果此缓冲区中剩余的浮点数少于 length
        IndexOutOfBoundsException - 如果 offsetlength参数的前提条件不成立
      • get

        public FloatBuffer get​(float[] dst)
        相对批量获取方法。

        此方法将浮动从此缓冲区传输到给定的目标阵列。 调用src.get(a)形式的此方法的行为与调用的方式完全相同

          src.get(a, 0, a.length) 
        参数
        dst - 目标阵列
        结果
        这个缓冲区
        异常
        BufferUnderflowException - 如果此缓冲区中剩余的浮点数少于 length
      • put

        public FloatBuffer put​(FloatBuffer src)
        相对批量放置方法(可选操作)

        此方法将剩余在给定源缓冲区中的浮点数传输到此缓冲区中。 如果源缓冲区中剩余的浮点数多于此缓冲区中的浮点数,即src.remaining() > remaining() ,则不会传输任何浮点数并抛出BufferOverflowException

        否则,此方法将n = src.remaining()浮动从给定缓冲区复制到此缓冲区中,从每个缓冲区的当前位置开始。 然后两个缓冲区的位置增加n

        换句话说,调用dst.put(src)形式的此方法与dst.put(src)具有完全相同的效果

          while (src.hasRemaining())
                 dst.put(src.get()); 
        除了它首先检查此缓冲区中是否有足够的空间,它可能更有效。
        参数
        src - 要从中读取浮点数的源缓冲区; 一定不能是这个缓冲区
        结果
        这个缓冲区
        异常
        BufferOverflowException - 如果此缓冲区中没有足够的空间用于源缓冲区中的剩余浮点数
        IllegalArgumentException - 如果源缓冲区是此缓冲区
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • put

        public FloatBuffer put​(float[] src,
                               int offset,
                               int length)
        相对批量放置方法(可选操作)

        此方法将浮动从给定的源数组传输到此缓冲区。 如果要从数组中复制的浮点数多于保留在此缓冲区中的浮点数,即length > remaining() ,则不会传输任何浮点数并抛出BufferOverflowException

        否则,此方法将length浮动从给定数组复制到此缓冲区,从数组中的给定偏移量开始,并在此缓冲区的当前位置。 然后,此缓冲区的位置增加length

        换句话说,调用dst.put(src, off, len)形式的此方法与dst.put(src, off, len)具有完全相同的效果

           for (int i = off; i < off + len; i++) dst.put(a[i]);  
        除了它首先检查此缓冲区中是否有足够的空间,它可能更有效。
        参数
        src - 要读取浮点数的数组
        offset - 要读取的第一个浮点数组中的偏移量; 必须是非负数且不大于array.length
        length - 从给定数组中读取的浮点数; 必须是非负数且不大于array.length - offset
        结果
        这个缓冲区
        异常
        BufferOverflowException - 如果此缓冲区中没有足够的空间
        IndexOutOfBoundsException - 如果 offsetlength参数的前提条件不成立
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • put

        public final FloatBuffer put​(float[] src)
        相对批量放置方法(可选操作)

        此方法将给定源float数组的整个内容传输到此缓冲区。 调用dst.put(a)形式的此方法的行为与调用的方式完全相同

          dst.put(a, 0, a.length) 
        参数
        src - 源数组
        结果
        这个缓冲区
        异常
        BufferOverflowException - 如果此缓冲区中没有足够的空间
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • hasArray

        public final boolean hasArray()
        判断此缓冲区是否由可访问的float数组支持。

        如果此方法返回true则可以安全地调用arrayarrayOffset方法。

        Specified by:
        hasArrayBuffer
        结果
        true当且仅当此缓冲区由数组支持且不是只读时
      • array

        public final float[] array()
        返回支持此缓冲区的float数组(可选操作)

        修改此缓冲区的内容将导致返回的数组内容被修改,反之亦然。

        在调用此方法之前调用hasArray方法,以确保此缓冲区具有可访问的后备阵列。

        Specified by:
        arrayBuffer
        结果
        支持此缓冲区的数组
        异常
        ReadOnlyBufferException - 如果此缓冲区由数组支持但是只读
        UnsupportedOperationException - 如果此缓冲区未由可访问的数组支持
      • arrayOffset

        public final int arrayOffset()
        返回此缓冲区缓冲区第一个元素的后备数组中的偏移量(可选操作)

        如果此缓冲区由数组支持,则缓冲区位置p对应于数组索引p + arrayOffset()

        在调用此方法之前调用hasArray方法,以确保此缓冲区具有可访问的后备阵列。

        Specified by:
        arrayOffsetBuffer
        结果
        缓冲区第一个元素的缓冲区数组中的偏移量
        异常
        ReadOnlyBufferException - 如果此缓冲区由数组支持但是只读
        UnsupportedOperationException - 如果此缓冲区未由可访问的数组支持
      • compact

        public abstract FloatBuffer compact()
        压缩此缓冲区(可选操作)

        缓冲区当前位置与其限制之间的浮点(如果有)将复制到缓冲区的开头。 也就是说,索引p = position()处的浮点数被复制到索引0,索引p + 1处的浮点数被复制到索引1,依此类推,直到指数limit()处的浮点数被复制到索引n = limit() - 1 - p 然后将缓冲区的位置设置为n + 1,并将其限制设置为其容量。 标记(如果已定义)将被丢弃。

        缓冲区的位置设置为复制的浮点数,而不是零,因此可以通过调用另一个相对put方法立即调用此方法。

        结果
        这个缓冲区
        异常
        ReadOnlyBufferException - 如果此缓冲区是只读的
      • isDirect

        public abstract boolean isDirect()
        判断此浮点缓冲区是否为直接缓冲区。
        Specified by:
        isDirectBuffer
        结果
        true当且仅当此缓冲区是直接的
      • toString

        public String toString()
        返回总结此缓冲区状态的字符串。
        重写:
        toStringObject
        结果
        摘要字符串
      • hashCode

        public int hashCode()
        返回此缓冲区的当前哈希码。

        浮点缓冲区的哈希码仅取决于其剩余的元素; 也就是说,来自position()的元素,包括元素limit() - 1

        因为缓冲区哈希码是依赖于内容的,所以不建议使用缓冲区作为哈希映射或类似数据结构中的键,除非已知它们的内容不会改变。

        重写:
        hashCodeObject
        结果
        此缓冲区的当前哈希码
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • equals

        public boolean equals​(Object ob)
        判断此缓冲区是否等于另一个对象。

        两个浮点缓冲区是相等的,当且仅当

        1. 它们具有相同的元素类型,

        2. 它们具有相同数量的剩余元素,并且

        3. 与其起始位置无关地考虑的两个剩余元素序列是逐点相等的。 如果(a == b) || (Float.isNaN(a) && Float.isNaN(b))此方法认为两个浮点元素ab相等。 -0.0+0.0被认为是相等的,不像Float.equals(Object)

        浮动缓冲区不等于任何其他类型的对象。

        重写:
        equalsObject
        参数
        ob - 要与此缓冲区进行比较的对象
        结果
        true当且仅当此缓冲区等于给定对象时
        另请参见:
        Object.hashCode()HashMap
      • compareTo

        public int compareTo​(FloatBuffer that)
        比较此缓冲区与另一个缓冲区。

        通过按字典顺序比较它们的剩余元素序列来比较两个浮动缓冲区,而不考虑每个序列在其相应缓冲区内的起始位置。 成对的float元素通过调用Float.compare(float,float)进行比较,但-0.00.0被认为是相等的。 Float.NaN被此方法视为等于其自身并且大于所有其他float值(包括Float.POSITIVE_INFINITY )。

        浮动缓冲区不能与任何其他类型的对象相比。

        Specified by:
        compareTo在界面 Comparable<FloatBuffer>
        参数
        that - 要比较的对象。
        结果
        此缓冲区小于,等于或大于给定缓冲区的负整数,零或正整数
      • mismatch

        public int mismatch​(FloatBuffer that)
        查找并返回此缓冲区与给定缓冲区之间第一个不匹配的相对索引。 索引相对于每个缓冲区的position ,并且将在0(包括)范围内,直到每个缓冲区中的较小的remaining元素(不包括)。

        如果两个缓冲区共享一个公共前缀,则返回的索引是公共前缀的长度,并且随后在相应缓冲区内该索引处的两个缓冲区之间存在不匹配。 如果一个缓冲区是另一个缓冲区的正确前缀,则返回的索引是每个缓冲区中剩余元素中较小的一个,并且随后索引仅对具有较多剩余元素的缓冲区有效。 否则,没有不匹配。

        参数
        that - 要测试与此缓冲区不匹配的字节缓冲区
        结果
        此与给定缓冲区之间的第一个不匹配的相对索引,否则为-1,如果没有不匹配。
        从以下版本开始:
        11
      • order

        public abstract ByteOrder order()
        检索此缓冲区的字节顺序。

        通过分配或通过包装现有float数组创建的浮点缓冲区的字节顺序是底层硬件的native order 创建为字节缓冲区的view的浮点缓冲区的字节顺序是创建视图时字节缓冲区的字节顺序。

        结果
        This buffer's byte order