public abstract class ByteBuffer
extends Buffer
implements Comparable<ByteBuffer>
java.lang.Object | ||
↳ | java.nio.Buffer | |
↳ | java.nio.ByteBuffer |
Known Direct Subclasses |
一个字节缓冲区。
该类在字节缓冲区中定义了六类操作:
相对 bulk get
将连续字节序列从此缓冲区传输到数组的方法;
相对 bulk put
将连续字节序列从字节数组或某些其他字节缓冲区传输到此缓冲区的方法;
用于创建view buffers的方法,它允许将字节缓冲区视为包含其他某些基本类型值的缓冲区; 和
方法 compacting
,
duplicating
和
slicing
一个字节的缓冲区。
字节缓冲器可以通过以下方式创建 allocation
,这对于缓冲区内容分配空间,或通过
wrapping
现有字节数组到缓冲区中。
字节缓冲区可以是直接的也可以是非直接的 。 给定一个直接的字节缓冲区,Java虚拟机将尽最大努力直接对它执行本地I / O操作。 也就是说,它将尝试避免在每次调用某个底层操作系统的本地I / O操作之前(或之后)将缓冲区内容复制到(或从)中间缓冲区。
A direct byte buffer may be created by invoking the
allocateDirect
这个类的工厂方法。 这种方法返回的缓冲区通常比非直接缓冲区有更高的分配和释放成本。 直接缓冲区的内容可能位于正常垃圾收集堆的外部,因此它们对应用程序内存占用量的影响可能不明显。 因此,建议将直接缓冲区主要分配给受底层系统本地I / O操作影响的大型,长寿命缓冲区。 一般来说,只有当它们在程序性能上产生可测量的增益时才最好分配直接缓冲区。
直接字节缓冲区还可以通过创建 mapping
的文件的区域直接到内存中。 Java平台的实现可以选择性地支持通过JNI从本地代码创建直接字节缓冲区。 如果其中一种缓冲区的实例引用了内存的不可访问区域,那么尝试访问该区域将不会更改缓冲区的内容,并且会导致在访问时或稍后引发未指定的异常时间。
字节缓冲区是直接还是非直接可以通过调用其isDirect
方法来确定。 提供此方法的目的是显式缓冲区管理可以在性能关键的代码中完成。
This class defines methods for reading and writing values of all other primitive types, except boolean. Primitive values are translated to (or from) sequences of bytes according to the buffer's current byte order, which may be retrieved and modified via the
order
方法。 特定的字节顺序由ByteOrder
类的实例表示。 字节缓冲区的初始顺序始终为BIG_ENDIAN
。
为了访问异构二进制数据,即不同类型的值序列,该类为每种类型定义了一系列绝对和相对的get和put方法。 例如,对于32位浮点值,此类定义:
floatgetFloat()
floatgetFloat(int index)
voidputFloat(float f)
voidputFloat(int index, float f)
相应的方法被用于类型char,short,int,long,和double限定。 绝对get和put方法的索引参数是以字节为单位而不是被读取或写入的类型。
例如, For access to homogeneous binary data, that is, sequences of values of the same type, this class defines methods that can create views of a given byte buffer. A view buffer is simply another buffer whose content is backed by the byte buffer. Changes to the byte buffer's content will be visible in the view buffer, and vice versa; the two buffers' position, limit, and mark values are independent. The
asFloatBuffer
方法创建FloatBuffer
类的实例,该实例由调用该方法的字节缓冲区支持。 相应的视图创建方法的各类char,short,int,long,和double限定。
与上面描述的类型特定的 get和 put方法的家族相比,查看缓冲区有三个重要的优点:
视图缓冲区的索引不是以字节为单位,而是根据其值的类型特定大小进行索引;
视图缓冲区提供了相对的批量get和put方法,可以在缓冲区和数组或相同类型的某个其他缓冲区之间传输连续的值序列; 和
视图缓冲区可能效率更高,因为如果并且只有在其背景字节缓冲区是直接的情况下它才是直接的。
视图缓冲区的字节顺序在创建视图时被固定为其字节缓冲区的字节顺序。
指定此类中不具有返回值的方法以返回调用它们的缓冲区。 这允许方法调用被链接。 陈述的顺序
can, for example, be replaced by the single statementbb.putInt(0xCAFEBABE); bb.putShort(3); bb.putShort(45);
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
Public methods |
|
---|---|
static ByteBuffer |
allocate(int capacity) 分配一个新的字节缓冲区。 |
static ByteBuffer |
allocateDirect(int capacity) 分配新的直接字节缓冲区。 |
final byte[] |
array() 返回支持此缓冲区的字节数组 (可选操作) 。 |
final int |
arrayOffset() 返回缓冲区第一个元素 (可选操作)的此缓冲区的后备数组内的偏移量。 |
abstract CharBuffer |
asCharBuffer() 创建该字节缓冲区的视图作为字符缓冲区。 |
abstract DoubleBuffer |
asDoubleBuffer() 创建该字节缓冲区的视图为双缓冲区。 |
abstract FloatBuffer |
asFloatBuffer() 以浮点缓冲区的形式创建此字节缓冲区的视图。 |
abstract IntBuffer |
asIntBuffer() 以int缓冲区的形式创建该字节缓冲区的视图。 |
abstract LongBuffer |
asLongBuffer() 将该字节缓冲区的视图创建为长缓冲区。 |
abstract ByteBuffer |
asReadOnlyBuffer() 创建一个共享此缓冲区内容的新的只读字节缓冲区。 |
abstract ShortBuffer |
asShortBuffer() 将此字节缓冲区的视图创建为短缓冲区。 |
abstract ByteBuffer |
compact() 压缩此缓冲区 (可选操作) 。 |
int |
compareTo(ByteBuffer that) 将此缓冲区与另一个进行比较。 |
abstract ByteBuffer |
duplicate() 创建一个共享此缓冲区内容的新字节缓冲区。 |
boolean |
equals(Object ob) 告诉这个缓冲区是否等于另一个对象。 |
abstract byte |
get() 相对 获得方法。 |
ByteBuffer |
get(byte[] dst, int offset, int length) 相对批量 获取方法。 |
abstract byte |
get(int index) 绝对 get方法。 |
ByteBuffer |
get(byte[] dst) 相对批量 获取方法。 |
abstract char |
getChar() 读取char值的相对 get方法。 |
abstract char |
getChar(int index) 用于读取char值的绝对 get方法。 |
abstract double |
getDouble(int index) 读取double值的绝对 get方法。 |
abstract double |
getDouble() 读取double值的相对 get方法。 |
abstract float |
getFloat() 读取float值的相对 get方法。 |
abstract float |
getFloat(int index) 用于读取浮点值的绝对 get方法。 |
abstract int |
getInt(int index) 读取int值的绝对 get方法。 |
abstract int |
getInt() 读取int值的相对 get方法。 |
abstract long |
getLong(int index) 绝对 get方法读取长整型值。 |
abstract long |
getLong() 读取长整型值的相对 获取方法。 |
abstract short |
getShort(int index) 读取短值的绝对 获取方法。 |
abstract short |
getShort() 读取短值的相对 获取方法。 |
final boolean |
hasArray() 告诉这个缓冲区是否由可访问的字节数组支持。 |
int |
hashCode() 返回此缓冲区的当前哈希码。 |
abstract boolean |
isDirect() 告诉这个字节缓冲区是否是直接的。 |
final ByteOrder |
order() 检索此缓冲区的字节顺序。 |
final ByteBuffer |
order(ByteOrder bo) 修改此缓冲区的字节顺序。 |
final ByteBuffer |
put(byte[] src) 相对批量 放置方法 (可选操作) 。 |
abstract ByteBuffer |
put(byte b) 相对 放置方法 (可选操作) 。 |
ByteBuffer |
put(byte[] src, int offset, int length) 相对批量 放置方法 (可选操作) 。 |
abstract ByteBuffer |
put(int index, byte b) 绝对 放置方法 (可选操作) 。 |
ByteBuffer |
put(ByteBuffer src) 相对批量 放置方法 (可选操作) 。 |
abstract ByteBuffer |
putChar(int index, char value) 写入char值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putChar(char value) 写入char值的相对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putDouble(double value) 写入double值的相对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putDouble(int index, double value) 写入double值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putFloat(int index, float value) 写入浮点值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putFloat(float value) 写入浮点值的相对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putInt(int index, int value) 写入int值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putInt(int value) 写入int值的相对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putLong(long value) 写入长整型值的相对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putLong(int index, long value) 写入长整型值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
putShort(short value) 写入短数值的相对 放入方法 (可选操作) 。 |
abstract ByteBuffer |
putShort(int index, short value) 写入短暂值的绝对 put方法 (可选操作) 。 |
abstract ByteBuffer |
slice() 创建一个新的字节缓冲区,其内容是此缓冲区内容的共享子序列。 |
String |
toString() 返回汇总此缓冲区状态的字符串。 |
static ByteBuffer |
wrap(byte[] array) 将一个字节数组包装到缓冲区中。 |
static ByteBuffer |
wrap(byte[] array, int offset, int length) 将一个字节数组包装到缓冲区中。 |
Inherited methods |
|
---|---|
From class java.nio.Buffer
|
|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
ByteBuffer allocate (int capacity)
分配一个新的字节缓冲区。
新的缓冲区的位置将为零,其限制将是其容量,其标记将是未定义的,并且其每个元素将被初始化为零。 它将有一个 backing array
,其
array offset
将为零。
Parameters | |
---|---|
capacity |
int : The new buffer's capacity, in bytes |
Returns | |
---|---|
ByteBuffer |
The new byte buffer |
Throws | |
---|---|
IllegalArgumentException |
If the capacity is a negative integer |
ByteBuffer allocateDirect (int capacity)
分配新的直接字节缓冲区。
新的缓冲区的位置将为零,其限制将是其容量,其标记将是未定义的,并且其每个元素将被初始化为零。 是否具有 backing array
未指定。
Parameters | |
---|---|
capacity |
int : The new buffer's capacity, in bytes |
Returns | |
---|---|
ByteBuffer |
The new byte buffer |
Throws | |
---|---|
IllegalArgumentException |
If the capacity is a negative integer |
byte[] array ()
返回支持此缓冲区的字节数组 (可选操作) 。
修改此缓冲区的内容将导致返回的数组内容被修改,反之亦然。
在调用此方法之前调用 hasArray
方法,以确保此缓冲区具有可访问的后备数组。
Returns | |
---|---|
byte[] |
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 |
CharBuffer asCharBuffer ()
创建该字节缓冲区的视图作为字符缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字节数除以2,其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
CharBuffer |
A new char buffer |
DoubleBuffer asDoubleBuffer ()
创建该字节缓冲区的视图为双缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是该缓冲区中剩余的字节数除以8,其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
DoubleBuffer |
A new double buffer |
FloatBuffer asFloatBuffer ()
以浮点缓冲区的形式创建此字节缓冲区的视图。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字节数除以4,其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
FloatBuffer |
A new float buffer |
IntBuffer asIntBuffer ()
以int缓冲区的形式创建该字节缓冲区的视图。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字节数除以4,其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
IntBuffer |
A new int buffer |
LongBuffer asLongBuffer ()
将该字节缓冲区的视图创建为长缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
The new buffer's position will be zero, its capacity and its limit will be the number of bytes remaining in this buffer divided by eight, 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 | |
---|---|
LongBuffer |
A new long buffer |
ByteBuffer asReadOnlyBuffer ()
创建一个共享此缓冲区内容的新的只读字节缓冲区。
新缓冲区的内容将是该缓冲区的内容。 此缓冲区内容的更改将在新缓冲区中可见; 但是新的缓冲区本身将是只读的,并且不允许修改共享内容。 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与该缓冲区的相同。
如果此缓冲区本身是只读的,则此方法的行为方式与 duplicate
方法完全相同。
Returns | |
---|---|
ByteBuffer |
The new, read-only byte buffer |
ShortBuffer asShortBuffer ()
将此字节缓冲区的视图创建为短缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字节数除以2,其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
ShortBuffer |
A new short buffer |
ByteBuffer compact ()
压缩此缓冲区 (可选操作) 。
缓冲区当前位置与其限制之间的字节(如果有)将被复制到缓冲区的开始处。 即,在索引p = position()复制到索引零字节,在索引p + 1的字节被复制到索引1,依此类推,直到在索引limit()字节- 1被复制到索引n = limit() - 1 - p 。 然后将缓冲区的位置设置为n + 1,并将其限制设置为其容量。 标记(如果已定义)将被丢弃。
缓冲区的位置设置为复制的字节数,而不是零,因此可以立即调用另一个相对 放置方法来调用此方法。
在写入数据不完整时从缓冲区写入数据后调用此方法。 例如,以下循环通过缓冲区buf将字节从一个通道复制到另一个通道:
buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
ReadOnlyBufferException |
If this buffer is read-only |
int compareTo (ByteBuffer that)
将此缓冲区与另一个进行比较。
通过按照字典顺序比较剩余元素的序列来比较两个字节的缓冲区,而不考虑每个序列在其相应缓冲区内的开始位置。 对byte
元素进行比较,就好像调用compare(byte, byte)
。
字节缓冲区不能与任何其他类型的对象相比较。
Parameters | |
---|---|
that |
ByteBuffer
|
Returns | |
---|---|
int |
A negative integer, zero, or a positive integer as this buffer is less than, equal to, or greater than the given buffer |
ByteBuffer duplicate ()
创建一个共享此缓冲区内容的新字节缓冲区。
新缓冲区的内容将是该缓冲区的内容。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与该缓冲区的相同。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
ByteBuffer |
The new byte buffer |
boolean equals (Object ob)
告诉这个缓冲区是否等于另一个对象。
Two byte buffers are equal if, and only if,
它们具有相同的元素类型,
他们有相同数量的剩余元素,并且
独立于其起始位置考虑的剩余元素的两个序列是逐点相等的。
A byte buffer is not equal to any other type of 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 |
byte get ()
相对获得方法。 在此缓冲区的当前位置读取该字节,然后递增该位置。
Returns | |
---|---|
byte |
The byte at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If the buffer's current position is not smaller than its limit |
ByteBuffer get (byte[] 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 bytes in this buffer and it is potentially much more efficient.
Parameters | |
---|---|
dst |
byte : The array into which bytes are to be written |
offset |
int : The offset within the array of the first byte to be written; must be non-negative and no larger than dst.length |
length |
int : The maximum number of bytes to be written to the given array; must be non-negative and no larger than dst.length - offset |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than length bytes remaining in this buffer |
IndexOutOfBoundsException |
If the preconditions on the offset and length parameters do not hold |
byte get (int index)
绝对get方法。 读取给定索引处的字节。
Parameters | |
---|---|
index |
int : The index from which the byte will be read |
Returns | |
---|---|
byte |
The byte at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit |
ByteBuffer get (byte[] dst)
相对批量 获取方法。
此方法将来自此缓冲区的字节传输到给定的目标数组中。 表单src.get(a)的此方法的调用的行为与调用完全相同
src.get(a, 0, a.length)
Parameters | |
---|---|
dst |
byte
|
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than length bytes remaining in this buffer |
char getChar ()
读取char值的相对 get方法。
读取此缓冲区当前位置的下两个字节,根据当前字节顺序将它们组合为char值,然后将位置增加2。
Returns | |
---|---|
char |
The char value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than two bytes remaining in this buffer |
char getChar (int index)
用于读取char值的绝对 get方法。
读取给定索引处的两个字节,根据当前字节顺序将它们组成char值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
char |
The char value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus one |
double getDouble (int index)
读取double值的绝对 get方法。
读取给定索引处的八个字节,根据当前字节顺序将它们组合为一个double值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
double |
The double value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus seven |
double getDouble ()
读取double值的相对 get方法。
读取此缓冲区当前位置的后八个字节,根据当前字节顺序将它们组合为一个double值,然后将该位置增加八。
Returns | |
---|---|
double |
The double value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than eight bytes remaining in this buffer |
float getFloat ()
读取float值的相对 get方法。
读取此缓冲区当前位置的下四个字节,根据当前字节顺序将它们组合为浮点值,然后将位置增加4。
Returns | |
---|---|
float |
The float value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than four bytes remaining in this buffer |
float getFloat (int index)
用于读取浮点值的绝对 get方法。
在给定索引处读取四个字节,根据当前字节顺序将它们组成浮点值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
float |
The float value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus three |
int getInt (int index)
读取int值的绝对 get方法。
在给定索引处读取四个字节,根据当前字节顺序将它们组成一个int值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
int |
The int value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus three |
int getInt ()
读取int值的相对 get方法。
读取此缓冲区当前位置的下四个字节,根据当前字节顺序将它们组合为int值,然后将位置增加4。
Returns | |
---|---|
int |
The int value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than four bytes remaining in this buffer |
long getLong (int index)
绝对 get方法读取长整型值。
根据当前字节顺序在给定索引处读取八个字节,将它们组合为一个长整型值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
long |
The long value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus seven |
long getLong ()
读取长整型值的相对 获取方法。
读取此缓冲区当前位置的下8个字节,根据当前字节顺序将它们组合为长值,然后将位置增加8。
Returns | |
---|---|
long |
The long value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than eight bytes remaining in this buffer |
short getShort (int index)
读取短值的绝对 获取方法。
读取给定索引处的两个字节,根据当前字节顺序将它们组成短值。
Parameters | |
---|---|
index |
int : The index from which the bytes will be read |
Returns | |
---|---|
short |
The short value at the given index |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus one |
short getShort ()
读取短值的相对 获取方法。
在此缓冲区的当前位置读取接下来的两个字节,根据当前字节顺序将它们组成短值,然后将位置增加2。
Returns | |
---|---|
short |
The short value at the buffer's current position |
Throws | |
---|---|
BufferUnderflowException |
If there are fewer than two bytes remaining in this buffer |
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 ()
检索此缓冲区的字节顺序。
读取或写入多字节值时以及创建缓冲区时,将使用字节顺序来查看此字节缓冲区。 新创建的字节缓冲区的顺序始终为BIG_ENDIAN
。
Returns | |
---|---|
ByteOrder |
This buffer's byte order |
ByteBuffer order (ByteOrder bo)
Modifies this buffer's byte order.
Parameters | |
---|---|
bo |
ByteOrder : The new byte order, either BIG_ENDIAN or LITTLE_ENDIAN |
Returns | |
---|---|
ByteBuffer |
This buffer |
ByteBuffer put (byte[] src)
相对批量 放置方法 (可选操作) 。
此方法将给定源字节数组的全部内容传输到此缓冲区。 表单dst.put(a)的这种方法的调用的行为与调用完全相同
dst.put(a, 0, a.length)
Parameters | |
---|---|
src |
byte
|
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there is insufficient space in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer put (byte b)
相对 放置方法 (可选操作) 。
将给定的字节写入当前位置的缓冲区,然后增加位置。
Parameters | |
---|---|
b |
byte : The byte to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If this buffer's current position is not smaller than its limit |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer put (byte[] src, int offset, int length)
相对批量 放置方法 (可选操作) 。
该方法将字节从给定的源数组传输到此缓冲区。 如果从阵列中复制的字节数多于保留在此缓冲区中的字节数,也就是说,如果length > remaining() ,则不传输字节并且引发BufferOverflowException
。
否则,此方法将length字节从给定数组复制到此缓冲区,从数组中给定的偏移量开始,并在此缓冲区的当前位置处开始。 此缓冲区的位置然后增加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 |
byte : The array from which bytes are to be read |
offset |
int : The offset within the array of the first byte to be read; must be non-negative and no larger than array.length |
length |
int : The number of bytes to be read from the given array; must be non-negative and no larger than array.length - offset |
Returns | |
---|---|
ByteBuffer |
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 |
ByteBuffer put (int index, byte b)
绝对 放置方法 (可选操作) 。
将给定的字节写入该缓冲区中给定的索引处。
Parameters | |
---|---|
index |
int : The index at which the byte will be written |
b |
byte : The byte value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer put (ByteBuffer 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 |
ByteBuffer : The source buffer from which bytes are to be read; must not be this buffer |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there is insufficient space in this buffer for the remaining bytes in the source buffer |
IllegalArgumentException |
If the source buffer is this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putChar (int index, char value)
写入char值的绝对 put方法 (可选操作) 。
将包含给定char值的两个字节按当前字节顺序写入此缓冲区中给定索引处。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
char : The char value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus one |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putChar (char value)
写入char值的相对 put方法 (可选操作) 。
将包含给定char值的两个字节以当前字节顺序写入当前位置的缓冲区,然后将位置增加2。
Parameters | |
---|---|
value |
char : The char value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than two bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putDouble (double value)
写入double值的相对 put方法 (可选操作) 。
将包含给定double值的八个字节以当前字节顺序写入当前位置的缓冲区,然后将该位置增加八。
Parameters | |
---|---|
value |
double : The double value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than eight bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putDouble (int index, double value)
写入double值的绝对 put方法 (可选操作) 。
将包含给定double值的八个字节按当前字节顺序写入给定索引处的此缓冲区。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
double : The double value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus seven |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putFloat (int index, float value)
写入浮点值的绝对 put方法 (可选操作) 。
将包含给定float值的四个字节按当前字节顺序写入给定索引处的此缓冲区中。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
float : The float value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus three |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putFloat (float value)
写入浮点值的相对 put方法 (可选操作) 。
将包含给定float值的四个字节按当前字节顺序写入当前位置的缓冲区中,然后将位置增加四。
Parameters | |
---|---|
value |
float : The float value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than four bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putInt (int index, int value)
写入int值的绝对 put方法 (可选操作) 。
将包含给定int值的四个字节以当前字节顺序写入给定索引处的此缓冲区。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
int : The int value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus three |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putInt (int value)
写入int值的相对 put方法 (可选操作) 。
将包含给定int值的四个字节按当前字节顺序写入当前位置的此缓冲区,然后将位置增加四。
Parameters | |
---|---|
value |
int : The int value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than four bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putLong (long value)
写入长整型值的相对 put方法 (可选操作) 。
将包含给定long值的八个字节按当前字节顺序写入当前位置的缓冲区,然后将位置增加八。
Parameters | |
---|---|
value |
long : The long value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than eight bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putLong (int index, long value)
写入长整型值的绝对 put方法 (可选操作) 。
将包含给定long值的八个字节以当前字节顺序写入给定索引处的此缓冲区。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
long : The long value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus seven |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putShort (short value)
写入短数值的相对 放入方法 (可选操作) 。
将包含给定short值的两个字节按当前字节顺序写入当前位置的缓冲区,然后将位置增加2。
Parameters | |
---|---|
value |
short : The short value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
BufferOverflowException |
If there are fewer than two bytes remaining in this buffer |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer putShort (int index, short value)
写入短暂值的绝对 put方法 (可选操作) 。
将包含给定short值的两个字节以当前字节顺序写入给定索引处的此缓冲区中。
Parameters | |
---|---|
index |
int : The index at which the bytes will be written |
value |
short : The short value to be written |
Returns | |
---|---|
ByteBuffer |
This buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If index is negative or not smaller than the buffer's limit, minus one |
ReadOnlyBufferException |
If this buffer is read-only |
ByteBuffer slice ()
创建一个新的字节缓冲区,其内容是此缓冲区内容的共享子序列。
新缓冲区的内容将从此缓冲区的当前位置开始。 这个缓冲区内容的改变将在新缓冲区中可见,反之亦然; 两个缓冲区的位置,限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是剩余在此缓冲区中的字节数,并且其标记将是未定义的。 当且仅当此缓冲区是直接的时,新缓冲区才是直接的,并且只有在此缓冲区是只读的情况下,它才会是只读的。
Returns | |
---|---|
ByteBuffer |
The new byte buffer |
ByteBuffer wrap (byte[] array)
将一个字节数组包装到缓冲区中。
新缓冲区将由给定的字节数组支持; 也就是说,修改缓冲区将导致数组被修改,反之亦然。 新缓冲区的容量和限制将为array.length ,其位置将为零,并且其标记将不确定。 其 backing array
将是给定的阵列,其
array offset
将为零。
Parameters | |
---|---|
array |
byte : The array that will back this buffer |
Returns | |
---|---|
ByteBuffer |
The new byte buffer |
ByteBuffer wrap (byte[] array, int offset, int length)
将一个字节数组包装到缓冲区中。
新缓冲区将由给定的字节数组支持; 也就是说,修改缓冲区将导致数组被修改,反之亦然。 新缓冲区容量为array.length ,位置为offset ,限制为offset + length ,其标记未定义。 它的 backing array
将是给定的数组,其
array offset
将为零。
Parameters | |
---|---|
array |
byte : 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 | |
---|---|
ByteBuffer |
The new byte buffer |
Throws | |
---|---|
IndexOutOfBoundsException |
If the preconditions on the offset and length parameters do not hold |