- 所有已实现的接口:
Appendable
,CharSequence
,Comparable<CharBuffer>
,Readable
此类定义了对字符缓冲区的四类操作:
绝对和相对
bulk get
方法,将连续的字符序列从该缓冲区传输到数组中;绝对和相对
bulk put
方法,将连续的字符序列从 char 数组、字符串或其他一些 char 缓冲区传输到此缓冲区;compacting
字符缓冲区的方法。
字符缓冲区可以通过 allocation
创建,它为缓冲区的内容分配空间,通过 wrapping
将现有的字符数组或字符串放入缓冲区,或者通过创建现有字节缓冲区的 看法 来创建。
与字节缓冲区一样,字符缓冲区是 直接的或者非直接的 。通过此类的 wrap
方法创建的字符缓冲区将是非直接的。当且仅当字节缓冲区本身是直接的时,作为字节缓冲区的视图创建的 char 缓冲区将是直接的。 char 缓冲区是否是直接的可以通过调用 isDirect
方法来确定。
此类实现了 CharSequence
接口,以便可以在接受字符序列的任何地方使用字符缓冲区,例如在正则表达式包 java.util.regex
中。 CharSequence
定义的方法在调用时相对于缓冲区的当前位置进行操作。
此类中没有返回值的方法被指定为返回调用它们的缓冲区。这允许链接方法调用。语句的顺序
例如,可以用单个语句代替cb.put("text/"); cb.put(subtype); cb.put("; charset="); cb.put(enc);
cb.put("text/").put(subtype).put("; charset=").put(enc);
- 自从:
- 1.4
-
方法总结
修饰符和类型方法描述static CharBuffer
allocate
(int capacity) 分配一个新的字符缓冲区。append
(char c) 将指定的字符追加到此缓冲区(可选操作).append
(CharSequence csq) 将指定的字符序列追加到此缓冲区(可选操作).append
(CharSequence csq, int start, int end) 将指定字符序列的子序列追加到此缓冲区(可选操作).final char[]
array()
返回支持此缓冲区的字符数组(可选操作).final int
返回缓冲区第一个元素在此缓冲区的后备数组中的偏移量(可选操作).abstract CharBuffer
创建一个共享此缓冲区内容的新的只读字符缓冲区。final char
charAt
(int index) 读取相对于当前位置的给定索引处的字符。final CharBuffer
clear()
清除此缓冲区。abstract CharBuffer
compact()
压缩此缓冲区(可选操作).int
compareTo
(CharBuffer that) 将此缓冲区与另一个缓冲区进行比较。abstract CharBuffer
创建一个共享此缓冲区内容的新字符缓冲区。boolean
告知此缓冲区是否等于另一个对象。final CharBuffer
flip()
翻转此缓冲区。abstract char
get()
相对的get方法。get
(char[] dst) 相对体积get方法。get
(char[] dst, int offset, int length) 相对体积get方法。abstract char
get
(int index) 绝对get方法。get
(int index, char[] dst) 绝对散装get方法。get
(int index, char[] dst, int offset, int length) 绝对散装get方法。final boolean
hasArray()
告知此缓冲区是否由可访问的字符数组支持。int
hashCode()
返回此缓冲区的当前哈希码。abstract boolean
isDirect()
判断此 char 缓冲区是否是直接的。final boolean
isEmpty()
如果此字符缓冲区为空,则返回true
。final int
length()
返回此字符缓冲区的长度。final CharBuffer
limit
(int newLimit) 设置此缓冲区的限制。final CharBuffer
mark()
在其位置设置此缓冲区的标记。int
mismatch
(CharBuffer that) 查找并返回此缓冲区与给定缓冲区之间第一个不匹配的相对索引。abstract ByteOrder
order()
检索此缓冲区的字节顺序。final CharBuffer
position
(int newPosition) 设置此缓冲区的位置。abstract CharBuffer
put
(char c) 相对的put方法(可选操作).final CharBuffer
put
(char[] src) 相对体积put方法(可选操作).put
(char[] src, int offset, int length) 相对体积put方法(可选操作).abstract CharBuffer
put
(int index, char c) 绝对put方法(可选操作).put
(int index, char[] src) 绝对散装put方法(可选操作).put
(int index, char[] src, int offset, int length) 绝对散装put方法(可选操作).put
(int index, CharBuffer src, int offset, int length) 绝对散装put方法(可选操作).final CharBuffer
相对体积put方法(可选操作).相对体积put方法(可选操作).put
(CharBuffer src) 相对体积put方法(可选操作).int
read
(CharBuffer target) 尝试将字符读入指定的字符缓冲区。final CharBuffer
reset()
将此缓冲区的位置重置为先前标记的位置。final CharBuffer
rewind()
倒带此缓冲区。abstract CharBuffer
slice()
创建一个新的字符缓冲区,其内容是此缓冲区内容的共享子序列。abstract CharBuffer
slice
(int index, int length) 创建一个新的字符缓冲区,其内容是此缓冲区内容的共享子序列。abstract CharBuffer
subSequence
(int start, int end) 创建一个新的字符缓冲区,表示该缓冲区相对于当前位置的指定子序列。toString()
返回包含此缓冲区中的字符的字符串。static CharBuffer
wrap
(char[] array) 将 char 数组包装到缓冲区中。static CharBuffer
wrap
(char[] array, int offset, int length) 将 char 数组包装到缓冲区中。static CharBuffer
wrap
(CharSequence csq) 将字符序列包装到缓冲区中。static CharBuffer
wrap
(CharSequence csq, int start, int end) 将字符序列包装到缓冲区中。在类 java.nio.Buffer 中声明的方法
capacity, hasRemaining, isReadOnly, limit, position, remaining
在接口 java.lang.CharSequence 中声明的方法
chars, codePoints
-
方法详情
-
allocate
分配一个新的字符缓冲区。新缓冲区的位置将为零,其限制为其容量,其标记为未定义,其每个元素都将初始化为零,其字节顺序将为底层硬件的
native order
。它会有一个backing array
,它的array offset
将为零。- 参数:
capacity
- 新缓冲区的容量,以字符为单位- 返回:
- 新的字符缓冲区
- 抛出:
IllegalArgumentException
- 如果capacity
是负整数
-
wrap
将 char 数组包装到缓冲区中。新缓冲区将由给定的 char 数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。新缓冲区的容量为
array.length
,位置为offset
,限制为offset + length
,标记未定义,字节顺序为底层硬件的native order
。它的backing array
将是给定的数组,而它的array offset
将为零。- 参数:
array
- 将支持新缓冲区的数组offset
- 要使用的子数组的偏移量;必须为非负且不大于array.length
。新缓冲区的位置将设置为此值。length
- 要使用的子数组的长度;必须为非负且不大于array.length - offset
。新缓冲区的限制将设置为offset + length
。- 返回:
- 新的字符缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果offset
和length
参数的先决条件不成立
-
wrap
将 char 数组包装到缓冲区中。新缓冲区将由给定的 char 数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。新缓冲区的容量和限制将为
array.length
,其位置将为零,其标记将未定义,其字节顺序将为底层硬件的native order
。它的backing array
将是给定的数组,而它的array offset
将为零。- 参数:
array
- 将支持此缓冲区的数组- 返回:
- 新的字符缓冲区
-
read
尝试将字符读入指定的字符缓冲区。缓冲区按原样用作字符存储库:所做的唯一更改是 put 操作的结果。不执行缓冲区的翻转或倒带。- 指定者:
read
在接口Readable
中- 参数:
target
- 将字符读入的缓冲区- 返回:
- 添加到缓冲区的字符数,如果此字符源在其末尾则为 -1
- 抛出:
IOException
- 如果发生 I/O 错误ReadOnlyBufferException
- 如果目标是只读缓冲区- 自从:
- 1.5
-
wrap
将字符序列包装到缓冲区中。新的只读缓冲区的内容将是给定字符序列的内容。缓冲区的容量为
csq.length()
,其位置为start
,其限制为end
,其标记未定义。- 参数:
csq
- 要创建新字符缓冲区的字符序列start
- 要使用的第一个字符的索引;必须为非负且不大于csq.length()
。新缓冲区的位置将设置为此值。end
- 要使用的最后一个字符之后的字符的索引;必须不小于start
且不大于csq.length()
。新缓冲区的限制将设置为此值。- 返回:
- 新的字符缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果start
和end
参数的先决条件不成立
-
wrap
将字符序列包装到缓冲区中。新的只读缓冲区的内容将是给定字符序列的内容。新缓冲区的容量和限制将为
csq.length()
,其位置将为零,其标记为未定义。- 参数:
csq
- 要创建新字符缓冲区的字符序列- 返回:
- 新的字符缓冲区
-
slice
创建一个新的字符缓冲区,其内容是此缓冲区内容的共享子序列。新缓冲区的内容将从该缓冲区的当前位置开始。对此缓冲区内容的更改将在新缓冲区中可见,反之亦然;两个缓冲区的位置、限制和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将为该缓冲区中剩余的字符数,其标记将未定义,其字节顺序将与该缓冲区的字节顺序相同。当且仅当此缓冲区是直接的时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读的时,它将是只读的。
-
slice
创建一个新的字符缓冲区,其内容是此缓冲区内容的共享子序列。新缓冲区的内容将从该缓冲区中的位置
index
开始,并将包含length
个元素。对此缓冲区内容的更改将在新缓冲区中可见,反之亦然;两个缓冲区的位置、限制和标记值将是独立的。新缓冲区的位置将为零,其容量和限制将为
length
,其标记将未定义,其字节顺序将与该缓冲区的字节顺序相同。当且仅当此缓冲区是直接的时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读的时,它将是只读的。- 指定者:
slice
在类Buffer
中- 参数:
index
- 该缓冲区中新缓冲区内容开始的位置;必须为非负且不大于limit()
length
- 新缓冲区将包含的元素数;必须为非负且不大于limit() - index
- 返回:
- 新缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
为负或大于limit()
,则length
为负,或length > limit() - index
- 自从:
- 13
-
duplicate
创建一个共享此缓冲区内容的新字符缓冲区。新缓冲区的内容将是该缓冲区的内容。对此缓冲区内容的更改将在新缓冲区中可见,反之亦然;两个缓冲区的位置、限制和标记值将是独立的。
新缓冲区的容量、限制、位置、标记值和字节顺序将与该缓冲区的相同。当且仅当此缓冲区是直接的时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读的时,它将是只读的。
-
asReadOnlyBuffer
创建一个共享此缓冲区内容的新的只读字符缓冲区。新缓冲区的内容将是该缓冲区的内容。对此缓冲区内容的更改将在新缓冲区中可见;然而,新缓冲区本身将是只读的,并且不允许修改共享内容。两个缓冲区的位置、限制和标记值将是独立的。
新缓冲区的容量、限制、位置、标记值和字节顺序将与该缓冲区的相同。
如果此缓冲区本身是只读的,则此方法的行为方式与
duplicate
方法完全相同。- 返回:
- 新的只读字符缓冲区
-
get
public abstract char get()相对的get方法。读取此缓冲区当前位置的字符,然后递增该位置。- 返回:
- 缓冲区当前位置的字符
- 抛出:
BufferUnderflowException
- 如果缓冲区的当前位置不小于其限制
-
put
相对的put方法(可选操作).将给定的 char 在当前位置写入此缓冲区,然后递增该位置。
- 参数:
c
- 要写入的字符- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果此缓冲区的当前位置不小于其限制ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
get
public abstract char get(int index) 绝对get方法。读取给定索引处的字符。- 参数:
index
- 从中读取字符的索引- 返回:
- 给定索引处的字符
- 抛出:
IndexOutOfBoundsException
- 如果index
为负数或不小于缓冲区的限制
-
put
绝对put方法(可选操作).将给定的字符写入给定索引处的缓冲区。
- 参数:
index
- 将写入字符的索引c
- 要写入的字符值- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
为负数或不小于缓冲区的限制ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
get
相对体积get方法。此方法将字符从此缓冲区传输到给定的目标数组。如果缓冲区中剩余的字符少于满足请求所需的字符,即如果
length
>
remaining()
,则不传输任何字符并抛出BufferUnderflowException
。否则,此方法将
length
个字符从该缓冲区复制到给定数组,从该缓冲区的当前位置和数组中的给定偏移量开始。然后这个缓冲区的位置增加length
。换句话说,调用
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
- 如果offset
和length
参数的先决条件不成立
-
get
相对体积get方法。此方法将字符从此缓冲区传输到给定的目标数组。调用
src.get(a)
形式的方法的行为与调用完全相同src.get(a, 0, a.length)
- 参数:
dst
- 目标数组- 返回:
- 这个缓冲区
- 抛出:
BufferUnderflowException
- 如果此缓冲区中剩余的字符少于length
个
-
get
绝对散装get方法。此方法将
length
个字符从此缓冲区传输到给定数组,从该缓冲区中的给定索引和数组中的给定偏移量开始。这个缓冲区的位置没有改变。调用
src.get(index, dst, offset, length)
形式的此方法与以下循环具有完全相同的效果,除了它首先检查提供的参数的一致性并且它可能更有效:for (int i = offset, j = index; i < offset + length; i++, j++) dst[i] = src.get(j);
- 参数:
index
- 该缓冲区中的索引,将从中读取第一个字符;必须为非负且小于limit()
dst
- 目标数组offset
- 要写入的第一个字符在数组中的偏移量;必须为非负且小于dst.length
length
- 要写入给定数组的字符数;必须为非负且不大于limit() - index
和dst.length - offset
中的较小者- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
、offset
和length
参数的先决条件不成立- 自从:
- 13
-
get
绝对散装get方法。此方法将字符从此缓冲区传输到给定的目标数组。这个缓冲区的位置没有改变。调用
src.get(index, dst)
形式的方法的行为与调用完全相同:src.get(index, dst, 0, dst.length)
- 参数:
index
- 该缓冲区中的索引,将从中读取第一个字符;必须为非负且小于limit()
dst
- 目标数组- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
为负,不小于limit()
或limit() - index < dst.length
- 自从:
- 13
-
put
相对体积put方法(可选操作).此方法将给定源缓冲区中剩余的字符传输到此缓冲区中。如果源缓冲区中剩余的字符多于此缓冲区中的字符,即如果
src.remaining()
>
remaining()
,则不传输任何字符并抛出BufferOverflowException
。否则,此方法复制n=
src.remaining()
从给定缓冲区到此缓冲区的字符,从每个缓冲区的当前位置开始。然后将两个缓冲区的位置递增n.换句话说,调用
dst.put(src)
形式的方法与循环具有完全相同的效果while (src.hasRemaining()) dst.put(src.get());
除了它首先检查此缓冲区中是否有足够的空间并且它可能更有效。如果此缓冲区和源缓冲区共享相同的后备数组或内存,则结果将好像源元素在写入此缓冲区之前首先复制到中间位置。- 参数:
src
- 要从中读取字符的源缓冲区;不能是这个缓冲区- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果此缓冲区中的空间不足以容纳源缓冲区中的剩余字符IllegalArgumentException
- 如果源缓冲区是这个缓冲区ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
put
绝对散装put方法(可选操作).此方法将
length
个字符从给定的源缓冲区传输到此缓冲区,从源缓冲区中的给定offset
和此缓冲区中的给定index
开始。两个缓冲区的位置都没有改变。换句话说,调用
dst.put(index, src, offset, length)
形式的方法与循环具有完全相同的效果
除了它首先检查提供的参数的一致性并且它可能更有效。如果此缓冲区和源缓冲区共享相同的后备数组或内存,则结果将好像源元素在写入此缓冲区之前首先复制到中间位置。for (int i = offset, j = index; i < offset + length; i++, j++) dst.put(j, src.get(i));
- 参数:
index
- 该缓冲区中第一个字符将被写入的索引;必须为非负且小于limit()
src
- 要从中读取字符的缓冲区offset
- 要读取的第一个字符在源缓冲区中的索引;必须为非负且小于src.limit()
length
- 要从给定缓冲区读取的字符数;必须为非负且不大于limit() - index
和src.limit() - offset
中的较小者- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
、offset
和length
参数的先决条件不成立ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 16
-
put
相对体积put方法(可选操作).此方法将字符从给定的源数组传输到此缓冲区。如果要从数组中复制的字符多于此缓冲区中保留的字符,即如果
length
>
remaining()
,则不传输任何字符并抛出BufferOverflowException
。否则,此方法将从给定数组中的
length
个字符复制到此缓冲区,从数组中的给定偏移量开始,并在此缓冲区的当前位置。然后这个缓冲区的位置增加length
。换句话说,调用
dst.put(src, off, len)
形式的方法与循环具有完全相同的效果
除了它首先检查此缓冲区中是否有足够的空间并且它可能更有效。for (int i = off; i < off + len; i++) dst.put(src[i]);
- 参数:
src
- 要从中读取字符的数组offset
- 要读取的第一个字符在数组中的偏移量;必须为非负且不大于src.length
length
- 要从给定数组中读取的字符数;必须为非负且不大于src.length - offset
- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足IndexOutOfBoundsException
- 如果offset
和length
参数的先决条件不成立ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
put
相对体积put方法(可选操作).此方法将给定源字符数组的全部内容传输到此缓冲区中。调用
dst.put(a)
形式的方法的行为与调用完全相同dst.put(a, 0, a.length)
- 参数:
src
- 源数组- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
put
绝对散装put方法(可选操作).此方法从给定数组中传输
length
个字符,从数组中的给定偏移量和此缓冲区中的给定索引开始。这个缓冲区的位置没有改变。调用
dst.put(index, src, offset, length)
形式的此方法与以下循环具有完全相同的效果,除了它首先检查提供的参数的一致性并且它可能更有效:for (int i = offset, j = index; i < offset + length; i++, j++) dst.put(j, src[i]);
- 参数:
index
- 该缓冲区中第一个字符将被写入的索引;必须为非负且小于limit()
src
- 要从中读取字符的数组offset
- 要读取的第一个字符在数组中的偏移量;必须为非负且小于src.length
length
- 要从给定数组中读取的字符数;必须为非负且不大于limit() - index
和src.length - offset
中的较小者- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
、offset
和length
参数的先决条件不成立ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 13
-
put
绝对散装put方法(可选操作).此方法将字符从给定的源数组复制到此缓冲区中。这个缓冲区的位置没有改变。对
dst.put(index, src)
形式的方法的调用与调用的行为完全相同:dst.put(index, src, 0, src.length);
- 参数:
index
- 该缓冲区中第一个字符将被写入的索引;必须为非负且小于limit()
src
- 要从中读取字符的数组- 返回:
- 这个缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果index
为负,不小于limit()
或limit() - index < src.length
ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 13
-
put
相对体积put方法(可选操作).此方法将给定字符串中的字符传输到此缓冲区中。如果要从字符串中复制的字符数多于保留在此缓冲区中的字符数,即如果
end - start
>
remaining()
,则不会传输任何字符并抛出BufferOverflowException
。否则,此方法复制n=
end
-start
将给定字符串中的字符放入此缓冲区,从给定的start
索引和此缓冲区的当前位置开始。这个缓冲区的位置然后递增n.换句话说,调用
dst.put(src, start, end)
形式的方法与循环具有完全相同的效果
除了它首先检查此缓冲区中是否有足够的空间并且它可能更有效。for (int i = start; i < end; i++) dst.put(src.charAt(i));
- 参数:
src
- 要从中读取字符的字符串start
- 要读取的第一个字符在字符串中的偏移量;必须为非负且不大于string.length()
end
- 要读取的最后一个字符在字符串中的偏移量加一;必须为非负且不大于string.length()
- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足IndexOutOfBoundsException
- 如果start
和end
参数的先决条件不成立ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
put
相对体积put方法(可选操作).此方法将给定源字符串的全部内容传输到此缓冲区中。对
dst.put(s)
形式的方法的调用与调用的行为完全相同dst.put(s, 0, s.length())
- 参数:
src
- 源字符串- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
hasArray
public final boolean hasArray()告知此缓冲区是否由可访问的字符数组支持。如果此方法返回
true
,则可以安全地调用array
和arrayOffset
方法。 -
array
public final char[] array()返回支持此缓冲区的字符数组(可选操作).对此缓冲区内容的修改将导致返回数组的内容被修改,反之亦然。
在调用此方法之前调用
hasArray
方法,以确保此缓冲区具有可访问的后备数组。- 指定者:
array
在类Buffer
中- 返回:
- 支持此缓冲区的数组
- 抛出:
ReadOnlyBufferException
- 如果此缓冲区由数组支持但为只读UnsupportedOperationException
- 如果此缓冲区不受可访问数组的支持
-
arrayOffset
public final int arrayOffset()返回缓冲区第一个元素在此缓冲区的后备数组中的偏移量(可选操作).如果此缓冲区由数组支持,则缓冲区位置p对应数组索引p
arrayOffset()
。在调用此方法之前调用
hasArray
方法,以确保此缓冲区具有可访问的后备数组。- 指定者:
arrayOffset
在类Buffer
中- 返回:
- 缓冲区第一个元素在此缓冲区数组中的偏移量
- 抛出:
ReadOnlyBufferException
- 如果此缓冲区由数组支持但为只读UnsupportedOperationException
- 如果此缓冲区不受可访问数组的支持
-
position
设置此缓冲区的位置。如果标记已定义且大于新位置,则将其丢弃。 -
limit
设置此缓冲区的限制。如果位置大于新限制,则将其设置为新限制。如果标记已定义且大于新限制,则将其丢弃。 -
mark
在其位置设置此缓冲区的标记。 -
reset
将此缓冲区的位置重置为先前标记的位置。调用此方法既不会更改也不会丢弃标记的值。
-
clear
清除此缓冲区。位置设置为零,限制设置为容量,标记被丢弃。在使用一系列通道读取或之前调用此方法put填充此缓冲区的操作。例如:
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
这种方法实际上并没有擦除缓冲区中的数据,但它的命名就好像它确实擦除一样,因为它最常用于可能是这种情况的情况。
-
flip
翻转此缓冲区。限制设置为当前位置,然后位置设置为零。如果标记已定义,则将其丢弃。经过一系列通道读取或put操作,调用此方法来准备一系列通道写入或相关get操作。例如:
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
在将数据从一个地方传输到另一个地方时,该方法通常与
compact
方法结合使用。 -
rewind
倒带此缓冲区。位置设置为零,标记被丢弃。在一系列通道写入或之前调用此方法get操作,假设已经适当地设置了限制。例如:
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
-
compact
压缩此缓冲区(可选操作).缓冲区当前位置与其限制之间的字符(如果有)被复制到缓冲区的开头。即索引处的字符p
position()
被复制到索引零,索引处的字符p1 被复制到索引 1,依此类推,直到索引limit()
- 1 处的字符被复制到索引nlimit()
-1
-p.缓冲区的位置然后设置为n+1个其限制设置为其容量。标记(如果已定义)将被丢弃。缓冲区的位置设置为复制的字符数,而不是零,因此调用此方法后可以立即调用另一个相关方法put方法。
- 返回:
- 这个缓冲区
- 抛出:
ReadOnlyBufferException
- 如果这个缓冲区是只读的
-
isDirect
public abstract boolean isDirect()判断此 char 缓冲区是否是直接的。 -
hashCode
public int hashCode()返回此缓冲区的当前哈希码。char 缓冲区的散列码仅取决于其剩余元素;也就是说,基于从
position()
到并包括limit()
-1
处的元素的元素。因为缓冲区哈希码依赖于内容,所以不建议使用缓冲区作为hash map或类似数据结构中的键,除非知道它们的内容不会改变。
-
equals
告知此缓冲区是否等于另一个对象。当且仅当两个字符缓冲区相等时,
它们具有相同的元素类型,
它们具有相同数量的剩余元素,并且
独立于它们的起始位置考虑的剩余元素的两个序列逐点相等。
字符缓冲区不等于任何其他类型的对象。
-
compareTo
将此缓冲区与另一个缓冲区进行比较。通过按字典顺序比较剩余元素的序列来比较两个 char 缓冲区,而不考虑每个序列在其相应缓冲区中的起始位置。成对的
char
元素就像调用Character.compare(char,char)
一样进行比较。字符缓冲区无法与任何其他类型的对象相提并论。
- 指定者:
compareTo
在接口Comparable<CharBuffer>
中- 参数:
that
- 要比较的对象。- 返回:
- 负整数、零或正整数,因为此缓冲区小于、等于或大于给定缓冲区
-
mismatch
查找并返回此缓冲区与给定缓冲区之间第一个不匹配的相对索引。该索引与每个缓冲区的position
相关,并且将在 0(含)到每个缓冲区中的remaining
元素(不包括)中较小的范围内。如果两个缓冲区共享一个公共前缀,则返回的索引是公共前缀的长度,因此两个缓冲区在各自缓冲区内的该索引处存在不匹配。如果一个缓冲区是另一个缓冲区的适当前缀,则返回的索引是每个缓冲区中剩余元素中较小的一个,因此该索引仅对剩余元素数量较多的缓冲区有效。否则,不存在不匹配。
- 参数:
that
- 要测试与此缓冲区不匹配的字节缓冲区- 返回:
- 此缓冲区与给定缓冲区之间第一个不匹配的相对索引,否则如果不匹配则为 -1。
- 自从:
- 11
-
toString
返回包含此缓冲区中的字符的字符串。结果字符串的第一个字符将是此缓冲区位置的字符,而最后一个字符将是索引
limit()
- 1 处的字符。调用此方法不会更改缓冲区的位置。- 指定者:
toString
在接口CharSequence
中- 重写:
toString
在类Object
中- 返回:
- 指定字符串
-
length
public final int length()返回此字符缓冲区的长度。当看作一个字符序列时,字符缓冲区的长度就是位置(含)和限制(不含)之间的字符数;也就是说,它相当于
remaining()
。- 指定者:
length
在接口CharSequence
中- 返回:
- 这个字符缓冲区的长度
-
isEmpty
public final boolean isEmpty()如果此字符缓冲区为空,则返回true
。- 指定者:
isEmpty
在接口CharSequence
中- 返回:
true
如果还有0
个剩余字符,否则false
- 自从:
- 15
-
charAt
public final char charAt(int index) 读取相对于当前位置的给定索引处的字符。- 指定者:
charAt
在接口CharSequence
中- 参数:
index
- 要读取的字符的索引,相对于位置;必须为非负且小于remaining()
- 返回:
-
索引
position() + index
处的字符 - 抛出:
IndexOutOfBoundsException
- 如果index
的先决条件不成立
-
subSequence
创建一个新的字符缓冲区,表示该缓冲区相对于当前位置的指定子序列。新缓冲区将共享此缓冲区的内容;也就是说,如果这个缓冲区的内容是可变的,那么对一个缓冲区的修改将导致另一个缓冲区被修改。新缓冲区的容量将是该缓冲区的容量,其位置将为
position()
+start
,其限制将为position()
+end
,其字节顺序将与该缓冲区的字节顺序相同。当且仅当此缓冲区是直接的时,新缓冲区将是直接的,并且当且仅当此缓冲区是只读的时,它将是只读的。- 指定者:
subSequence
在接口CharSequence
中- 参数:
start
- 子序列中第一个字符相对于当前位置的索引;必须为非负且不大于remaining()
end
- 子序列中最后一个字符之后的字符相对于当前位置的索引;必须不小于start
且不大于remaining()
- 返回:
- 新的字符缓冲区
- 抛出:
IndexOutOfBoundsException
- 如果start
和end
的先决条件不成立
-
append
将指定的字符序列追加到此缓冲区(可选操作).对
dst.append(csq)
形式的方法的调用与调用的行为完全相同dst.put(csq.toString())
根据字符序列
csq
的toString
规范,可能不会附加整个序列。例如,调用字符缓冲区的toString
方法将返回一个子序列,其内容取决于缓冲区的位置和限制。- 指定者:
append
在接口Appendable
中- 参数:
csq
- 要追加的字符序列。如果csq
是null
,那么四个字符"null"
被追加到这个字符缓冲区。- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 1.5
-
append
将指定字符序列的子序列追加到此缓冲区(可选操作).当
csq
不是null
时调用dst.append(csq, start, end)
形式的方法,其行为与调用完全相同dst.put(csq.subSequence(start, end).toString())
- 指定者:
append
在接口Appendable
中- 参数:
csq
- 将追加子序列的字符序列。如果csq
是null
,那么字符将被追加,就好像csq
包含四个字符"null"
一样。start
- 子序列中第一个字符的索引end
- 子序列中最后一个字符之后的字符的索引- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足IndexOutOfBoundsException
- 如果start
或end
为负,则start
大于end
,或者end
大于csq.length()
ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 1.5
-
append
将指定的字符追加到此缓冲区(可选操作).dst.append(c)
形式的此方法的调用与调用的行为完全相同dst.put(c)
- 指定者:
append
在接口Appendable
中- 参数:
c
- 要追加的 16 位字符- 返回:
- 这个缓冲区
- 抛出:
BufferOverflowException
- 如果缓冲区空间不足ReadOnlyBufferException
- 如果这个缓冲区是只读的- 自从:
- 1.5
-
order
检索此缓冲区的字节顺序。通过分配或包装现有
char
数组创建的字符缓冲区的字节顺序是底层硬件的native order
。创建为字节缓冲区的 看法 的字符缓冲区的字节顺序是创建视图时字节缓冲区的字节顺序。- 返回:
- 此缓冲区的字节顺序
-