所有类


java.nio
类 CharBuffer

java.lang.Object
  继承者 java.nio.Buffer
      继承者 java.nio.CharBuffer
所有已实现的接口:
Appendable, CharSequence, Comparable<CharBuffer>, Readable

public abstract class CharBuffer
   
   
   
   
   
extends Buffer
implements Comparable<CharBuffer>, Appendable, CharSequence, Readable

字符缓冲区。

此类定义了字符缓冲区上的四类操作:

  • 读写单个字符的绝对和相对 getput 方法;

  • 将此缓冲区中的连续字符序列传输到数组中的相对批量 get 方法;

  • 将字符数组、字符串或其他字符缓冲区中的连续字符序列传输到此缓冲区的相对批量 put 方法;以及

  • 字符缓冲区的 compactingduplicatingslicing 方法。

字符缓冲区可以通过 allocation 方法创建,此方法通过 wrapping 将一个现有字符数组或字符串包装到缓冲区中来为缓冲区内容分配空间,或者通过创建现有字节缓冲区的视图来创建。

像字节缓冲区一样,字符缓冲区要么是直接的,要么是非直接的。通过此类的 wrap 方法创建的字符缓冲区将是非直接的。当且仅当字节缓冲区本身为直接时,作为字节缓冲区的视图创建的字符缓冲区才是直接的。通过调用 isDirect 方法可以确定字符缓冲区是否为直接的。

此类实现 CharSequence 接口,以便字符缓冲区可以用于任何接受字符序列的地方,例如,在正则表达式包 java.util.regex 中。

指定此类中不返回其他值的那些方法返回它们被调用时所在的缓冲区。这允许对方法调用进行链接。 例如,语句序列

 cb.put("text/");
 cb.put(subtype);
 cb.put("; charset=");
 cb.put(enc);
可以由以下单个语句替换
 cb.put("text/").put(subtype).put("; charset=").put(enc);

从以下版本开始:
1.4

方法摘要
static CharBufferallocate(int capacity)
          分配新的字符缓冲区。
 CharBufferappend(char c)
          将指定字符追加到此缓冲区(可选操作)
 CharBufferappend(CharSequence csq)
          将指定的字符序列追加到此缓冲区(可选操作)
 CharBufferappend(CharSequence csq, int start, int end)
          将指定字符序列的子序列追加到此缓冲区(可选操作)
 char[]array()
          返回实现此缓冲区的字符数组(可选操作)
 intarrayOffset()
          返回此缓冲区中的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)
abstract  CharBufferasReadOnlyBuffer()
          创建共享此缓冲区内容的新的只读字符缓冲区。
 charcharAt(int index)
          读取相对于当前位置的给定索引处的字符。
abstract  CharBuffercompact()
          压缩此缓冲区(可选操作)
 intcompareTo(CharBuffer that)
          将此缓冲区与另一个缓冲区进行比较。
abstract  CharBufferduplicate()
          创建共享此缓冲区内容的新的字符缓冲区。
 booleanequals(Object ob)
          判断此缓冲区是否与另一个对象相同。
abstract  charget()
          相对 get 方法。
 CharBufferget(char[] dst)
          相对批量 get 方法。
 CharBufferget(char[] dst, int offset, int length)
          相对批量 get 方法。
abstract  charget(int index)
          绝对 get 方法。
 booleanhasArray()
          判断该缓冲区是否可通过一个可访问的字符数组实现。
 inthashCode()
          返回此缓冲区的当前哈希码。
abstract  booleanisDirect()
          判断此字符缓冲区是否为直接的。
 intlength()
          返回此字符缓冲区的长度。
abstract  ByteOrderorder()
          检索此缓冲区的字节顺序。
abstract  CharBufferput(char c)
          相对 put 方法(可选操作)
 CharBufferput(char[] src)
          相对批量 put 方法(可选操作)
 CharBufferput(char[] src, int offset, int length)
          相对批量 put 方法(可选操作)
 CharBufferput(CharBuffer src)
          相对批量 put 方法(可选操作)
abstract  CharBufferput(int index, char c)
          绝对 put 方法(可选操作)
 CharBufferput(String src)
          相对批量 put 方法(可选操作)
 CharBufferput(String src, int start, int end)
          相对批量 put 方法(可选操作)
 intread(CharBuffer target)
          试图将字符读入指定的字符缓冲区。
abstract  CharBufferslice()
          创建新的字符缓冲区,其内容为此缓冲区内容的共享子序列。
abstract  CharSequencesubSequence(int start, int end)
          创建表示此缓冲区的指定序列、相对于当前位置的新字符缓冲区。
 StringtoString()
          返回包含此缓冲区中字符的字符串。
static CharBufferwrap(char[] array)
          将字符数组包装到缓冲区中。
static CharBufferwrap(char[] array, int offset, int length)
          将字符数组包装到缓冲区中。
static CharBufferwrap(CharSequence csq)
          将字符串包装到缓冲区中。
static CharBufferwrap(CharSequence csq, int start, int end)
          将字符序列包装到缓冲区中。
 
从类 java.nio.Buffer 继承的方法
capacity, clear, flip, hasRemaining, isReadOnly, limit, limit, mark, position, position, remaining, reset, rewind
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

方法详细信息

allocate

public static CharBuffer allocate(int capacity)
分配新的字符缓冲区。

新缓冲区的位置将为零,其界限将为其容量,其标记是未定义的。它将具有一个底层实现数组,且其数组偏移量将为零。

参数:
capacity - 新缓冲区的容量,以字符为单位
返回:
新的字符缓冲区
抛出:
IllegalArgumentException - 如果 capacity 为负整数

wrap

public static CharBuffer wrap(char[] array,
                              int offset,
                              int length)
将字符数组包装到缓冲区中。

给定的字符数组将支持新缓冲区;即缓冲区修改将导致数组修改,反之亦然。新缓冲区的容量将为 array.length,其位置将为 offset,其界限将为 offset + length,其标记是未定义的。其底层实现数组将为给定数组,并且其数组偏移量将为零。

参数:
array - 支持新缓冲区的数组
offset - 要使用的子数组的偏移量;必须为非负且不大于 array.length。将新缓冲区的位置设置为此值。
length - 要使用的子数组的长度;必须为非负且不大于 array.length - offset。新缓冲区的界限将被设置为 offset + length
返回:
新的字符缓冲区
抛出:
IndexOutOfBoundsException - 如果关于 offsetlength 参数的前提不成立

wrap

public static CharBuffer wrap(char[] array)
将字符数组包装到缓冲区中。

给定的字符数组将支持新缓冲区;即缓冲区修改将导致数组修改,反之亦然。新缓冲区的容量和界限将为 array.length,其位置将为零,其标记是未定义的。其底层实现数组将为给定数组,并且其数组偏移量将为零。

参数:
array - 实现此缓冲区的数组
返回:
新的字符缓冲区

read

public int read(CharBuffer target)
         throws IOException
试图将字符读入指定的字符缓冲区。缓冲区可照原样用作字符的存储库:所做的惟一更改是 put 操作的结果。不对缓冲区执行反转或重绕操作。

指定者:
接口 Readable 中的 read
参数:
target - 要将字符读入的缓冲区
返回:
添加到缓冲区的字符数量,如果此字符源位于缓冲区末端,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
NullPointerException - 如果目标为空
ReadOnlyBufferException - 如果目标是一个只读缓冲区

wrap

public static CharBuffer wrap(CharSequence csq,
                              int start,
                              int end)
将字符序列包装到缓冲区中。

新的只读缓冲区的内容将为给定字符序列的内容。缓冲区的容量将为 csq.length(),其位置将为 start,其界限将为 end,其标记是未定义的。

参数:
csq - 字符序列,新的字符缓冲区将从中创建
start - 要使用的第一个字符的索引;必须为非负且不大于 csq.length()。新缓冲区的位置将被设置为此值。
end - 要使用的最后一个字符后面的字符的索引;必须不小于 start 且不大于 csq.length()。将新缓冲区的界限设置为此值。
返回:
新的字符缓冲区
抛出:
IndexOutOfBoundsException - 如果关于 offsetlength 参数的前提不成立

wrap

public static CharBuffer wrap(CharSequence csq)
将字符串包装到缓冲区中。

新的只读缓冲区的内容将为给定字符串的内容。新缓冲区的容量和界限将为 csq.length(),其位置将为零,其标记是未定义的。

参数:
csq - 新的字符缓冲区要从其创建的字符序列
返回:
新的字符缓冲区

slice

public abstract CharBuffer slice()
创建新的字符缓冲区,其内容为此缓冲区内容的共享子序列。

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

新缓冲区的位置将为零,其容量和界限将为此缓冲区中所剩余的字符数量,其标记是未定义的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。

返回:
新的字符缓冲区