遍历的肯定不是容量啊,后面都是空的,没放东西,限制可能是limit吧,忘了

解决方案 »

  1.   


    package NewIO;import java.nio.*;
    import java.nio.charset.CharacterCodingException;
    import java.nio.charset.Charset;
    import java.nio.charset.CharsetDecoder;
    import java.nio.charset.CharsetEncoder;public class CharsetTransformTest {
    public static void main(String[] args) throws CharacterCodingException {
    // 创建简体中文对应的Charset
    Charset cn = Charset.forName("GBK");
    CharsetEncoder cnEncoder = cn.newEncoder();
    CharsetDecoder cnDecoder = cn.newDecoder();
    CharBuffer chbuf = CharBuffer.allocate(10);
    chbuf.put('a');
    chbuf.put('b');
    chbuf.put('c');
    chbuf.put('d');
    chbuf.flip();
    // 将CharBuffer中的字符序列转换成字节序列
    ByteBuffer bbuf = cnEncoder.encode(chbuf);
    System.out.println("bbuf.capacity():" + bbuf.capacity());
    System.out.println("chbuf.capacity():" + chbuf.capacity());
    // 循环访问每个字节
    for (int i = 0; i < bbuf.limit(); i++) {
    System.out.println(bbuf.get(i) + "");
    }
    System.out.println("\n" + cnDecoder.decode(bbuf));
    }
    }
    这样改就可以了
      

  2.   

    虽然我没有运行但是应该是索引异常吧,而且你的输出值应该是四个
    因为
    capacity 是字符串缓冲区的容量,你为chbuf  它 分配了四个缓冲区, 所以你当然只能输出四个啦,如果你再分配一个就会出现五个
      

  3.   

    capacity=8,运行一下看看
    我加入的都是字符,一个char型的不是两个字节吗?
      

  4.   

    调用flip方法的时候会重置limit将limit的值设置为当前position然后将其重置
    循环的时候发现大于limit了就抛出了异常
      

  5.   

    我调的是CharBuffer chbuf的filp,不是调的Bytebuffer bbuf的flip
    for循环里是bbuf.capacity()
      

  6.   

    我调的是CharBuffer chbuf的filp,不是调的Bytebuffer bbuf的flip
    for循环里是bbuf.capacity()
    在cnEncoder.encode(chbuf);调用时,会构造一个ByteBuffer out
    这个out最后是会flip的
    int n = (int)(in.remaining() * averageBytesPerChar());
    ByteBuffer out = ByteBuffer.allocate(n); if ((n == 0) && (in.remaining() == 0))
        return out;
    reset();
    for (;;) {
        CoderResult cr = in.hasRemaining() ?
    encode(in, out, true) : CoderResult.UNDERFLOW;
        if (cr.isUnderflow())
    cr = flush(out);     if (cr.isUnderflow())
    break;
        if (cr.isOverflow()) {
    n = 2*n + 1; // Ensure progress; n might be 0!
    ByteBuffer o = ByteBuffer.allocate(n);
    out.flip();
    o.put(out);
    out = o;
    continue;
        }
        cr.throwException();
    }
    out.flip();
    return out;