public abstract class CharBuffer extends Buffer implements Comparable<CharBuffer>, Appendable, CharSequence, Readable
这个类在char缓冲区中定义了四类操作:
 相对bulk get方法将连续的字符序列从该缓冲区传输到数组中; 和 
 相对于bulk put方法,将char数组,字符串或其他一些其他char缓冲区的连续字符序列传输到此缓冲区中; 和 
 方法compacting , duplicating和slicing char缓冲区。 
 Char缓冲区可以由allocation创建,它为缓冲区的内容分配空间,通过wrapping将现有的字符数组或字符串分配到缓冲区中,或通过创建现有字节缓冲区的view 。 
 像一个字节缓冲区一样,char buffer是direct or non-direct 。 通过这个类的wrap方法创建的char缓冲区将是非直接的。 作为字节缓冲区视图创建的char缓冲区将是直接的,只有当字节缓冲区本身是直接的。 char缓冲区是否直接可以通过调用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); 
        
      | Modifier and Type | Method and Description | 
|---|---|
| static CharBuffer | allocate(int capacity)
              分配一个新的char缓冲区。 
             | 
| CharBuffer | append(char c)
              将指定的字符追加到此缓冲区 
             (可选操作) 。 
             | 
| CharBuffer | append(CharSequence csq)
              将指定的字符序列追加到此缓冲区 
             (可选操作) 。 
             | 
| CharBuffer | append(CharSequence csq, int start, int end)
              将指定字符序列的子序列附加到此缓冲区 
             (可选操作) 。 
             | 
| char[] | array()
              返回支持此缓冲区的char数组 
             (可选操作) 。 
             | 
| int | arrayOffset()
              返回该缓冲区的缓冲区的第一个元素的背衬数组中的偏移量 
             (可选操作) 。 
             | 
| abstract CharBuffer | asReadOnlyBuffer()
              创建一个新的只读char缓冲区,共享此缓冲区的内容。 
             | 
| char | charAt(int index)
              以相对于当前位置的给定索引读取字符。 
             | 
| IntStream | chars()
              返回 
              int的流,从该序列零扩展char值。 | 
| abstract CharBuffer | compact() 
             压缩此缓冲区 
             (可选操作) 。 
             | 
| int | compareTo(CharBuffer that)
              将此缓冲区与另一个缓冲区进行比较。 
             | 
| abstract CharBuffer | duplicate()
              创建一个新的char缓冲区,共享此缓冲区的内容。 
             | 
| boolean | equals(Object ob)
              告诉这个缓冲区是否等于另一个对象。 
             | 
| abstract char | get()
              相对 
             获取方法。 
             | 
| CharBuffer | get(char[] dst)
              相对批量 
             获取方法。 
             | 
| CharBuffer | get(char[] dst, int offset, int length)
              相对批量 
             获取方法。 
             | 
| abstract char | get(int index)
              绝对 
             获取方法。 
             | 
| boolean | hasArray()
              告诉这个缓冲区是否由可访问的字符数组支持。 
             | 
| int | hashCode()
              返回此缓冲区的当前哈希码。 
             | 
| abstract boolean | isDirect()
              告诉这个char缓冲区是否直接。 
             | 
| int | length()
              返回此字符缓冲区的长度。 
             | 
| abstract ByteOrder | order()
              检索此缓冲区的字节顺序。 
             | 
| abstract CharBuffer | put(char c)
              相对 
             放置法 
             (可选操作) 。 
             | 
| CharBuffer | put(char[] src)
              相对大容量 
             put方法 
             (可选操作) 。 
             | 
| CharBuffer | put(char[] src, int offset, int length)
              相对大容量 
             put方法 
             (可选操作) 。 
             | 
| CharBuffer | put(CharBuffer src)
              相对大容量 
             put方法 
             (可选操作) 。 
             | 
| abstract CharBuffer | put(int index, char c)
              绝对 
             put方法 
             (可选操作) 。 
             | 
| CharBuffer | put(String src)
              相对大容量 
             put方法 
             (可选操作) 。 
             | 
| CharBuffer | put(String src, int start, int end)
              相对大容量 
             put方法 
             (可选操作) 。 
             | 
| int | read(CharBuffer target)
              尝试将字符读入指定的字符缓冲区。 
             | 
| abstract CharBuffer | slice()
              创建一个新的char缓冲区,其内容是此缓冲区内容的共享子序列。 
             | 
| abstract CharBuffer | subSequence(int start, int end)
              创建一个新的字符缓冲区,代表该缓冲区相对于当前位置的指定子序列。 
             | 
| String | 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)
              将字符序列包装到缓冲区中。 
             | 
capacity, clear, flip, hasRemaining, isReadOnly, limit, limit, mark, position, position, remaining, reset, rewindclone, finalize, getClass, notify, notifyAll, wait, wait, waitcodePointspublic static CharBuffer allocate(int capacity)
 新缓冲区的位置将为零,其限制将为其容量,其标记将不定义,并且其每个元素将被初始化为零。 它将有一个backing array ,其array offset将为零。 
capacity - 新的缓冲区的容量,在字符 
           IllegalArgumentException - 如果 
            capacity是负整数 
           public static CharBuffer wrap(char[] array, int offset, int length)
 新缓冲区将由给定的char数组支持; 也就是说,对缓冲区的修改将导致数组被修改,反之亦然。 新增缓存的容量将为array.length ,其位置将为offset ,其限额将为offset + length ,其标志将不明确。 它的backing array将是给定的数组,其array offset将为零。 
array - 将返回新缓冲区的数组 
           offset - 要使用的子阵列的偏移量; 
            必须是非负数,不得大于array.length 。 
            新缓冲区的位置将被设置为此值。 
           length - 要使用的子阵列的长度; 
            必须是非负数,不得大于array.length - offset 。 
            新缓冲区的限制将设置为offset + length 。 
           IndexOutOfBoundsException - 如果 
            offset和 
            length参数的前提条件不成立 
           public static CharBuffer wrap(char[] array)
 新缓冲区将由给定的char数组支持; 也就是说,对缓冲区的修改将导致数组被修改,反之亦然。 新缓冲区的容量和限制将为array.length ,其位置将为零,其标记将不确定。 它的backing array将是给定的数组,其array offset>将为零。 
array - 将返回此缓冲区的数组 
           public int read(CharBuffer target) throws IOException
read在界面 
            Readable 
           target - 读取字符的缓冲区 
           IOException - 如果发生I / O错误 
           NullPointerException - 如果target为null 
           ReadOnlyBufferException - 如果目标是只读缓冲区 
           public static CharBuffer wrap(CharSequence csq, int start, int end)
新的只读缓冲区的内容将是给定字符序列的内容。 缓冲区的容量将为csq.length() ,其位置将为start ,其限额将为end ,其标志将不明确。
csq - 要创建新字符缓冲区的字符序列 
           start - 要使用的第一个字符的索引; 
            必须是非负数,不得大于csq.length() 。 
            新缓冲区的位置将被设置为此值。 
           end - 要使用的最后一个字符后面的字符的索引; 
            必须不小于start ,不得大于csq.length() 。 
            新缓冲区的限制将被设置为此值。 
           IndexOutOfBoundsException - 如果 
            start和 
            end参数的前提条件不成立 
           public static CharBuffer wrap(CharSequence csq)
新的只读缓冲区的内容将是给定字符序列的内容。 新增的缓冲区的容量和限制将为csq.length() ,其位置将为零,其标志将不确定。
csq - 要从中创建新字符缓冲区的字符序列 
           public abstract CharBuffer slice()
新缓冲区的内容将从此缓冲区的当前位置开始。 对这个缓冲区内容的更改将在新的缓冲区中可见,反之亦然; 两个缓冲区的位置,极限和标记值将是独立的。
新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字符数,其标记将不定义。 如果只有这个缓冲区是直接的,并且只有当这个缓冲区是只读的时,这个缓冲区将是只读的。
public abstract CharBuffer duplicate()
新缓冲区的内容将是这个缓冲区的内容。 对这个缓冲区内容的更改将在新的缓冲区中可见,反之亦然; 两个缓冲区的位置,极限和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与此缓冲区的容量,限制,位置和标记值相同。 如果只有这个缓冲区是直接的,并且只有当这个缓冲区是只读的时,这个缓冲区将是只读的。
public abstract CharBuffer asReadOnlyBuffer()
新缓冲区的内容将是这个缓冲区的内容。 这个缓冲区内容的更改将在新的缓冲区中显示; 然而,新的缓冲区本身将是只读的,不允许修改共享内容。 两个缓冲区的位置,极限和标记值将是独立的。
新缓冲区的容量,限制,位置和标记值将与此缓冲区的容量,限制,位置和标记值相同。
 如果这个缓冲区本身是只读的,那么这个方法的行为与duplicate方法完全相同。 
public abstract char get()
BufferUnderflowException - 如果缓冲区的当前位置不小于其限制 
           public abstract CharBuffer put(char c)
将给定的字符写入当前位置的缓冲区,然后增加位置。
c - 
            c的字符 
           BufferOverflowException - 如果此缓冲区的当前位置不小于其限制 
           ReadOnlyBufferException - 如果这个缓冲区是只读的 
           public abstract char get(int index)
index - 从中读取char的索引 
           IndexOutOfBoundsException - 如果 
            index为负数或不小于缓冲区限制 
           public abstract CharBuffer put(int index, char c)
将给定的char写入给定索引的缓冲区。
index - 将写入字符的索引 
           c - 要写入的char值 
           IndexOutOfBoundsException - 如果 
            index为负值或不小于缓冲区限制 
           ReadOnlyBufferException - 如果此缓冲区是只读的 
           public CharBuffer get(char[] dst, int offset, int length)
 此方法将chars从此缓冲区传输到给定的目标数组。 如果缓冲区中剩余的字符少于满足请求所需的字符数,即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参数的前提条件不成立 
           public CharBuffer get(char[] dst)
此方法将chars从此缓冲区传输到给定的目标数组。 对这种形式src.get(a)的这种方法的调用与调用的方式完全相同
  src.get(a, 0, a.length)  
          dst - 目的数组 
           BufferUnderflowException - 如果此缓冲区中 
            剩余的字符少于 
            length个字符 
           public CharBuffer put(CharBuffer src)
 此方法将给定源缓冲区中剩余的字符传输到此缓冲区。 如果源缓冲区中剩余的字符多于此缓冲区中的字符数,即src.remaining() > remaining() ,则不会传输字符并抛出BufferOverflowException 。 
否则,该方法将n = src.remaining()从给定缓冲区中的字符复制到此缓冲区中,从每个缓冲区的当前位置开始。 然后将两个缓冲器的位置递增n 。
换句话说,调用此方法的形式dst.put(src)具有与循环完全相同的效果
  while (src.hasRemaining())
         dst.put(src.get());  
           除了它首先检查这个缓冲区中是否有足够的空间,并且它可能更有效率。 
          src - 要读取字符的源缓冲区; 
            不能是这个缓冲区 
           BufferOverflowException - 如果此缓冲区中没有足够的空间用于源缓冲区中的其余字符 
           IllegalArgumentException - 如果源缓冲区是这个缓冲区 
           ReadOnlyBufferException - 如果此缓冲区是只读的 
           public CharBuffer put(char[] src, int offset, int length)
 此方法将chars从给定的源数组传入此缓冲区。 如果要从数组复制的字符多于保留在此缓冲区中的字符,即length > remaining() ,则不会传输字符并抛出BufferOverflowException 。 
否则,该方法将length字符从给定的数组复制到此缓冲区中,从阵列中的给定偏移量和该缓冲区的当前位置开始。 此缓冲区的位置然后增加length 。
换句话说,这种dst.put(src, off, len)形式的方法的调用与循环完全相同
   for (int i = off; i < off + len; i++) dst.put(a[i]);   
           除了它首先检查这个缓冲区中是否有足够的空间,并且它可能更有效率。 
          src - 要从中读取字符的数组 
           offset - 要读取的第一个char的数组中的偏移量; 
            必须是非负数,不得大于array.length 
           length - 从给定数组读取的字符数; 
            必须是非负数,不得大于array.length - offset 
           BufferOverflowException - 如果此缓冲区空间不足 
           IndexOutOfBoundsException - 如果 
            offset和 
            length参数的前提条件不成立 
           ReadOnlyBufferException - 如果此缓冲区是只读的 
           public final CharBuffer put(char[] src)
此方法将给定源字符数组的整个内容传输到此缓冲区。 调用此方法的形式dst.put(a)的行为方式与调用完全相同
  dst.put(a, 0, a.length)  
          src - 源数组 
           BufferOverflowException - 如果此缓冲区空间不足 
           ReadOnlyBufferException - 如果此缓冲区是只读的 
           public CharBuffer put(String src, int start, int end)
 此方法将字符串从给定的字符串传输到此缓冲区。 如果从字符串中复制的字符数多于保留在此缓冲区中的字符数,即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 - 如果这个缓冲区是只读的 
           public final CharBuffer put(String src)
此方法将给定源字符串的整个内容传输到此缓冲区。 对这种形式dst.put(s)的这种方法的调用与调用的方式完全相同
  dst.put(s, 0, s.length())  
          src - 源字符串 
           BufferOverflowException - 如果此缓冲区空间不足 
           ReadOnlyBufferException - 如果此缓冲区为只读 
           public final boolean hasArray()
 如果此方法返回true,则可以安全地调用array和arrayOffset方法。 
public final char[] array()
array在类别 
            Buffer 
           ReadOnlyBufferException - 如果此缓冲区由数组支持但是只读 
           UnsupportedOperationException - 如果此缓冲区未由可访问阵列支持 
           public final int arrayOffset()
如果此缓冲区由数组支持,则缓冲区位置p对应于数组索引p + arrayOffset() 。
 在调用此方法之前调用hasArray方法,以确保此缓冲区具有可访问的后台阵列。 
arrayOffset在 
            Buffer 
           ReadOnlyBufferException - 如果此缓冲区由数组支持但是只读 
           UnsupportedOperationException - 如果此缓冲区未由可访问阵列支持 
           public abstract CharBuffer compact()
缓冲区当前位置和其限制(如果有的话)之间的字符将被复制到缓冲区的开头。 也就是说,索引p = position()处的char被复制到索引零,索引p + 1处的char被复制到索引号1,直到索引limit()-1的char被复制到索引n = limit() - 1 - p 。 然后将缓冲区的位置设置为n + 1 ,并将其限制设置为其容量。 标记如果被定义,则被丢弃。
缓冲区的位置设置为复制的字符数,而不是零,因此可以通过调用另一个相对put方法来立即调用此方法。
ReadOnlyBufferException - 如果这个缓冲区是只读的 
           public abstract boolean isDirect()
public int hashCode()
char缓冲区的哈希码仅依赖于它的剩余元素; 也就是说,从position()到元素,并包括元素在limit() - 1 。
因为缓冲区哈希码是内容依赖的,所以使用缓冲区作为哈希映射或类似数据结构中的密钥是不合适的,除非知道它们的内容不会改变。
hashCode在类别 
            Object 
           Object.equals(java.lang.Object) , 
            System.identityHashCode(java.lang.Object) 
           public boolean equals(Object ob)
两个char缓冲区是相等的,如果,只有这样,
它们具有相同的元素类型,
他们有相同数量的剩余元素,和
独立于其起始位置的剩余元素的两个序列是相等的。
char缓冲区不等于任何其他类型的对象。
equals在类别 
            Object 
           ob - 要比较该缓冲区的对象 
           Object.hashCode() , HashMap 
           public int compareTo(CharBuffer that)
 通过比较其字母顺序的剩余元素序列来比较两个字符缓冲区,而不考虑其相应缓冲区内每个序列的起始位置。 对对char元素进行比较,仿佛通过调用Character.compare(char,char) 。 
char缓冲区与任何其他类型的对象不可比较。
compareTo在界面 
            Comparable<CharBuffer> 
           that - 要比较的对象。 
           public String toString()
结果字符串的第一个字符将是此缓冲区位置的字符,而最后一个字符将是索引limit() - 1处的字符 。调用此方法不会更改缓冲区的位置。
toString在界面 
            CharSequence 
           toString在 
            Object 
           public final int length()
当被视为字符序列时,字符缓冲区的长度只是位置(包括)和限制(排除)之间的字符数; 也就是说,相当于remaining() 。
length在界面 
            CharSequence 
           public final char charAt(int index)
charAt在界面 
            CharSequence 
           index - 要读取的字符的相对于位置的索引; 
            必须是非负数,小于remaining() 
           IndexOutOfBoundsException - 如果index的 
            前提条件不成立 
           public abstract CharBuffer subSequence(int start, int end)
新缓冲区将共享此缓冲区的内容; 也就是说,如果此缓冲区的内容是可变的,则对一个缓冲区的修改将导致另一个缓冲区被修改。 新缓冲区的容量将是这个缓冲区的容量,其位置将为position() + start ,其限制将为position() + end 。 如果只有这个缓冲区是直接的,并且只有当这个缓冲区是只读的时,这个缓冲区将是只读的。
subSequence在界面 
            CharSequence 
           start - 子序列中第一个字符的相对于当前位置的索引; 
            必须是非负数,不得大于remaining() 
           end - 子序列中最后一个字符后面的字符的相对于当前位置的索引; 
            必须不小于start ,不得大于remaining() 
           IndexOutOfBoundsException - 如果 
            start和 
            end的前提条件不成立 
           public CharBuffer append(CharSequence csq)
对这种形式dst.append(csq)的这种方法的调用与调用的方式完全相同
  dst.put(csq.toString())  
            根据toString对于字符序列csq的规定 ,可能不会附加整个序列。 例如,调用字符缓冲区的toString方法将返回一个子序列,其内容取决于缓冲区的位置和限制。 
append在界面 
            Appendable 
           csq - 要追加的字符序列。 
            如果csq是null ,则四个字符"null"附加到该字符缓冲器。 
           BufferOverflowException - 如果此缓冲区空间不足 
           ReadOnlyBufferException - 如果此缓冲区为只读 
           public CharBuffer append(CharSequence csq, int start, int end)
形式的这种方法的调用时dst.append(csq, start, end) csq不是null,行为以完全相同的方式调用
  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 - 如果此缓冲区是只读的 
           public CharBuffer append(char c)
调用此方法的形式dst.append(c)的行为方式与调用完全相同
  dst.put(c)  
          append在界面 
            Appendable 
           c - 要追加的16位字符 
           BufferOverflowException - 如果此缓冲区空间不足 
           ReadOnlyBufferException - 如果此缓冲区是只读的 
           public abstract ByteOrder order()
 通过分配或通过包装现有char阵列创建的字符缓冲区的字节顺序是native order底层硬件。 作为字节缓冲区的view创建的char缓冲区的字节顺序是创建视图时的字节缓冲区的字节顺序。 
public IntStream chars()
CharSequence复制 
          chars在界面 
            CharSequence 
            Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.