public abstract class DoubleBuffer
extends Buffer
implements Comparable<DoubleBuffer>
java.lang.Object | ||
↳ | java.nio.Buffer | |
↳ | java.nio.DoubleBuffer |
双缓冲区。
这个类在双缓冲区中定义了四类操作:
相对 bulk get
将连续的双精度序列从此缓冲区转移到数组中的方法; 和
相对 bulk put
方法,将double阵列或某些其他双缓冲区的连续双精度序列传输到此缓冲区; 和
方法 compacting
,
duplicating
和
slicing
双缓冲。
可以通过 allocation
(为缓冲区的内容分配空间),
wrapping
将现有双数组分配到缓冲区中,或者通过创建现有字节缓冲区的 view来创建双缓冲区。
像字节缓冲区一样,双缓冲区是direct or non-direct 。 通过这个类的wrap方法创建的双缓冲区将是非直接的。 当且仅当字节缓冲区本身是直接的时,作为字节缓冲区视图创建的双缓冲区才是直接的。 双缓冲区是否是直接的可以通过调用isDirect
方法来确定。
指定此类中不具有返回值的方法以返回调用它们的缓冲区。 这允许方法调用被链接。
Public methods |
|
---|---|
static DoubleBuffer |
allocate(int capacity) 分配一个新的双缓冲区。 |
final double[] |
array() 返回支持此缓冲区的双数组 (可选操作) 。 |
final int |
arrayOffset() 返回缓冲区第一个元素 (可选操作)的此缓冲区的后备数组内的偏移量。 |
abstract DoubleBuffer |
asReadOnlyBuffer() 创建一个共享此缓冲区内容的新的只读双缓冲区。 |
abstract DoubleBuffer |
compact() 压缩此缓冲区 (可选操作) 。 |
int |
compareTo(DoubleBuffer that) 将此缓冲区与另一个进行比较。 |
abstract DoubleBuffer |
duplicate() 创建一个共享此缓冲区内容的新双缓冲区。 |
boolean |
equals(Object ob) 告诉这个缓冲区是否等于另一个对象。 |
abstract double |
get() 相对 获得方法。 |
DoubleBuffer |
get(double[] dst, int offset, int length) 相对批量 获取方法。 |
DoubleBuffer |
get(double[] dst) 相对批量 获取方法。 |
abstract double |
get(int index) 绝对 get方法。 |
final boolean |
hasArray() 告诉这个缓冲区是否由可访问的双数组支持。 |
int |
hashCode() 返回此缓冲区的当前哈希码。 |
abstract boolean |
isDirect() 告诉这个双缓冲区是否是直接的。 |
abstract ByteOrder |
order() 检索此缓冲区的字节顺序。 |
DoubleBuffer |
put(DoubleBuffer src) 相对批量 放置方法 (可选操作) 。 |
DoubleBuffer |
put(double[] src, int offset, int length) 相对批量 放置方法 (可选操作) 。 |
abstract DoubleBuffer |
put(double d) 相对 放置方法 (可选操作) 。 |
final DoubleBuffer |
put(double[] src) 相对批量 放置方法 (可选操作) 。 |
abstract DoubleBuffer |
put(int index, double d) 绝对 放置方法 (可选操作) 。 |
abstract DoubleBuffer |
slice() 创建一个新的双缓冲区,其内容是此缓冲区内容的共享子序列。 |
String |
toString() 返回汇总此缓冲区状态的字符串。 |
static DoubleBuffer |
wrap(double[] array) 将双数组包装到缓冲区中。 |
static DoubleBuffer |
wrap(double[] array, int offset, int length) 将双数组包装到缓冲区中。 |
Inherited methods |
|
---|---|
From class java.nio.Buffer
|
|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
DoubleBuffer allocate (int capacity)
分配一个新的双缓冲区。
新的缓冲区的位置将为零,其限制将是其容量,其标记将是未定义的,并且其每个元素将被初始化为零。 它将有一个 backing array
,其
array offset
将为零。
Parameters | |
---|---|
capacity |
int : The new buffer's capacity, in doubles |
Returns | |
---|---|
DoubleBuffer |
The new double buffer |
Throws | |
---|---|
IllegalArgumentException |
If the capacity is a negative integer |
double[] array ()
返回支持此缓冲区的双数组 (可选操作) 。
修改此缓冲区的内容将导致返回的数组内容被修改,反之亦然。
在调用此方法之前调用 hasArray
方法以确保此缓冲区具有可访问的后备阵列。
Returns | |
---|---|
double[] |
The array that backs this buffer |
Throws | |
---|---|
ReadOnlyBufferException |
If this buffer is backed by an array but is read-only |
UnsupportedOperationException |
If this buffer is not backed by an accessible array |
int arrayOffset ()
返回缓冲区第一个元素 (可选操作)的此缓冲区的后备数组内的偏移量。
如果此缓冲区由数组支持,则缓冲区位置 p对应于数组索引 p + arrayOffset() 。
在调用此方法之前调用 hasArray
方法,以确保此缓冲区具有可访问的后备数组。
Returns | |
---|---|
int |
The offset within this buffer's array of the first element of the buffer |
Throws | |
---|---|
ReadOnlyBufferException |
If this buffer is backed by an array but is read-only |
UnsupportedOperationException |
If this buffer is not backed by an accessible array |
DoubleBuffer asReadOnlyBuffer ()
创建一个共享此缓冲区内容的新的只读双缓冲区。
新缓冲区的内容将是该缓冲区的内容。 此缓冲区内容的更改将在新缓冲区中可见; 但是新的缓冲区本身将是只读的,并且不允许修改共享内容。 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与该缓冲区的相同。
如果此缓冲区本身是只读的,则此方法的行为方式与 duplicate
方法完全相同。
Returns | |
---|---|
DoubleBuffer |
The new, read-only double buffer |
DoubleBuffer compact ()
压缩此缓冲区 (可选操作) 。
缓冲区当前位置与其限制之间的双打(如果有)被复制到缓冲区的开始位置。 即,在索引p = position()双复制到索引为零,在索引处索引limit()双P + 1被复制到索引1,依此类推,直到双- 1被复制到索引n = limit() - 1 - p 。 然后将缓冲区的位置设置为n + 1,并将其限制设置为其容量。 标记(如果已定义)将被丢弃。
缓冲区的位置设置为复制的双精度数量,而不是零,以便可以立即调用另一个相对 放置方法来调用此方法。
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
ReadOnlyBufferException |
If this buffer is read-only |
int compareTo (DoubleBuffer that)
将此缓冲区与另一个进行比较。
通过按照字典顺序比较剩余元素的序列来比较两个双缓冲区,而不考虑每个序列在其相应缓冲区内的开始位置。 对double
元素进行比较,就好像通过调用compare(double, double)
,除了-0.0
和0.0
被认为是相等的。 该方法认为Double.NaN
等于自身并且大于所有其他double
值(包括Double.POSITIVE_INFINITY
)。
双缓冲区不能与其他类型的对象相比较。
Parameters | |
---|---|
that |
DoubleBuffer
|
Returns | |
---|---|
int |
A negative integer, zero, or a positive integer as this buffer is less than, equal to, or greater than the given buffer |
DoubleBuffer duplicate ()
创建一个共享此缓冲区内容的新双缓冲区。
新缓冲区的内容将是该缓冲区的内容。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与该缓冲区的相同。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
DoubleBuffer |
The new double buffer |
boolean equals (Object ob)
告诉这个缓冲区是否等于另一个对象。
Two double buffers are equal if, and only if,
它们具有相同的元素类型,
他们有相同数量的剩余元素,并且
独立于其起始位置考虑的剩余元素的两个序列是逐点相等的。 该方法认为两个双元件a
和b
是如果等于(a == b) || (Double.isNaN(a) && Double.isNaN(b))
。 值-0.0
和+0.0
被认为是相等的,不像equals(Object)
。
双缓冲区不等于任何其他类型的对象。
Parameters | |
---|---|
ob |
Object : The object to which this buffer is to be compared |
Returns | |
---|---|
boolean |
true if, and only if, this buffer is equal to the given object |
double get ()
相对获得方法。 在此缓冲区的当前位置读取double,然后增加位置。
Returns | |
---|---|
double |
The double at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If the buffer's current position is not smaller than its limit |
DoubleBuffer get (double[] dst, int offset, int length)
相对批量 获取方法。
此方法将双缓冲区从此缓冲区传输到给定的目标数组中。 如果缓冲区中剩余的双重比满足请求所需要的更少,也就是说,如果length > remaining() ,则不会传送双打,并且会抛出BufferUnderflowException
。
否则,此方法将length双精度数据从此缓冲区复制到给定数组中,从此缓冲区的当前位置开始,并在数组中给定偏移量处开始。 此缓冲区的位置然后增加length 。
换句话说,调用这个形式为 src.get(dst, off, len)的方法与 循环具有完全相同的效果
for (int i = off; i < off + len; i++) dst[i] = src.get();except that it first checks that there are sufficient doubles in this buffer and it is potentially much more efficient.
Parameters | |
---|---|
dst |
double : The array into which doubles are to be written |
offset |
int : The offset within the array of the first double to be written; must be non-negative and no larger than dst.length |
length |
int : The maximum number of doubles to be written to the given array; must be non-negative and no larger than dst.length - offset |
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than length doubles remaining in this buffer |
IndexOutOfBoundsException |
If the preconditions on the offset and length parameters do not hold |
DoubleBuffer get (double[] dst)
相对批量 获取方法。
此方法将双缓冲区从此缓冲区传输到给定的目标数组中。 表单src.get(a)的此方法的调用的行为方式与调用完全相同
src.get(a, 0, a.length)
Parameters | |
---|---|
dst |
double
|
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than length doubles remaining in this buffer |
double get (int index)
绝对get方法。 读取给定索引处的double。
Parameters | |
---|---|
index |
int : The index from which the double will be read |
Returns | |
---|---|
double |
The double at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit |
boolean hasArray ()
告诉这个缓冲区是否由可访问的双数组支持。
如果此方法返回 true ,则可安全地调用 array
和 arrayOffset
方法。
Returns | |
---|---|
boolean |
true if, and only if, this buffer is backed by an array and is not read-only |
int hashCode ()
返回此缓冲区的当前哈希码。
双缓冲区的哈希码仅依赖于其余的元素; 也就是说,从position()到limit() - 1的元素并包括该元素。
由于缓冲区散列码与内容相关,因此除非知道其内容不会改变,否则在散列映射或类似数据结构中使用缓冲区作为键是不可取的。
Returns | |
---|---|
int |
The current hash code of this buffer |
boolean isDirect ()
告诉这个双缓冲区是否是直接的。
Returns | |
---|---|
boolean |
true if, and only if, this buffer is direct |
ByteOrder order ()
检索此缓冲区的字节顺序。
通过分配或包装现有的double阵列创建的双缓冲区的字节顺序是底层硬件的 native order
。 创建为字节缓冲区view的双缓冲区的字节顺序是创建视图时字节缓冲区的字节顺序。
Returns | |
---|---|
ByteOrder |
This buffer's byte order |
DoubleBuffer put (DoubleBuffer src)
相对批量 放置方法 (可选操作) 。
此方法将剩余在给定源缓冲区中的双精度转移到此缓冲区中。 如果源缓冲区中剩余更多的双重比在此缓冲区中,也就是说,如果src.remaining() > remaining() ,则不会传输双打,并且会抛出BufferOverflowException
。
否则,这种方法从给定缓冲区复制n = src.remaining()双倍数据到这个缓冲区,从每个缓冲区的当前位置开始。 然后两个缓冲器的位置增加n 。
换句话说,调用表单 dst.put(src)的这种方法与 循环具有完全相同的效果
while (src.hasRemaining()) dst.put(src.get());except that it first checks that there is sufficient space in this buffer and it is potentially much more efficient.
Parameters | |
---|---|
src |
DoubleBuffer : The source buffer from which doubles are to be read; must not be this buffer |
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there is insufficient space in this buffer for the remaining doubles in the source buffer |
IllegalArgumentException |
If the source buffer is this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
DoubleBuffer put (double[] src, int offset, int length)
相对批量 放置方法 (可选操作) 。
该方法将来自给定源数组的双精度转移到此缓冲区中。 如果从阵列中复制的双数多于保留在此缓冲区中的数量,也就是说,如果length > remaining() ,那么不会传输双精度数据并引发BufferOverflowException
。
否则,此方法将length double从给定数组复制到此缓冲区,从数组中给定的偏移量开始,并在此缓冲区的当前位置开始。 此缓冲区的位置然后增加length 。
换句话说,调用这种形式为 dst.put(src, off, len)的方法与 循环具有完全相同的效果
for (int i = off; i < off + len; i++) dst.put(a[i]);except that it first checks that there is sufficient space in this buffer and it is potentially much more efficient.
Parameters | |
---|---|
src |
double : The array from which doubles are to be read |
offset |
int : The offset within the array of the first double to be read; must be non-negative and no larger than array.length |
length |
int : The number of doubles to be read from the given array; must be non-negative and no larger than array.length - offset |
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there is insufficient space in this buffer |
IndexOutOfBoundsException |
If the preconditions on the offset and length parameters do not hold |
ReadOnlyBufferException |
If this buffer is read-only |
DoubleBuffer put (double d)
相对 放置方法 (可选操作) 。
Writes the given double into this buffer at the current position, and then increments the position.
Parameters | |
---|---|
d |
double : The double to be written |
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If this buffer's current position is not smaller than its limit |
ReadOnlyBufferException |
If this buffer is read-only |
DoubleBuffer put (double[] src)
相对批量 放置方法 (可选操作) 。
此方法将给定源双数组的全部内容传输到此缓冲区。 表单dst.put(a)的这种方法的调用的行为方式与调用完全相同
dst.put(a, 0, a.length)
Parameters | |
---|---|
src |
double
|
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there is insufficient space in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
DoubleBuffer put (int index, double d)
绝对 放置方法 (可选操作) 。
在给定的索引处将给定的double写入此缓冲区。
Parameters | |
---|---|
index |
int : The index at which the double will be written |
d |
double : The double value to be written |
Returns | |
---|---|
DoubleBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit |
ReadOnlyBufferException |
If this buffer is read-only |
DoubleBuffer slice ()
创建一个新的双缓冲区,其内容是此缓冲区内容的共享子序列。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
The new buffer's position will be zero, its capacity and its limit will be the number of doubles remaining in this buffer, and its mark will be undefined. The new buffer will be direct if, and only if, this buffer is direct, and it will be read-only if, and only if, this buffer is read-only.
Returns | |
---|---|
DoubleBuffer |
The new double buffer |
DoubleBuffer wrap (double[] array)
将双数组包装到缓冲区中。
新缓冲区将由给定的双数组支持; 也就是说,修改缓冲区将导致数组被修改,反之亦然。 新缓冲区的容量和限制将为array.length ,其位置将为零,并且其标记将不确定。 其 backing array
将是给定的阵列,其
array offset
将为零。
Parameters | |
---|---|
array |
double : The array that will back this buffer |
Returns | |
---|---|
DoubleBuffer |
The new double buffer |
DoubleBuffer wrap (double[] array, int offset, int length)
将双数组包装到缓冲区中。
新缓冲区将由给定的双数组支持; 也就是说,修改缓冲区将导致数组被修改,反之亦然。 新缓冲区容量为array.length ,位置为offset ,限制为offset + length ,其标记为未定义。 它的 backing array
将是给定的数组,其
array offset
将为零。
Parameters | |
---|---|
array |
double : The array that will back the new buffer |
offset |
int : The offset of the subarray to be used; must be non-negative and no larger than array.length. The new buffer's position will be set to this value. |
length |
int : The length of the subarray to be used; must be non-negative and no larger than array.length - offset. The new buffer's limit will be set to offset + length. |
Returns | |
---|---|
DoubleBuffer |
The new double buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If the preconditions on the offset and length parameters do not hold |