import java.nio.*;
import static net.mindview.util.Print.*;public class GetData {
  private static final int BSIZE = 1024;
  public static void main(String[] args) {
    ByteBuffer bb = ByteBuffer.allocate(BSIZE);
    int i = 0;
    while(i++ < bb.limit())
      if(bb.get() != 0)
        print("nonzero");
    print("i = " + i);  //问题1:这里输出 i = 1025 为什么? 不是应该 1023的嘛~~(0 - 1023)
    bb.rewind();
    bb.asCharBuffer().put("Howdy!");
    char c;
    while((c = bb.getChar()) != 0)
      printnb(c + " ");
    print();
    bb.rewind(); //问题2:这里的 .rewind()方法有什么作用?和 clear()有什么区别?
    bb.asShortBuffer().put((short)471142);  //问题3:为什么这里输出的是99471142?这里的99是什么东西?
    print(bb.getShort());
    bb.rewind();
  }
}

解决方案 »

  1.   

     //问题1:这里输出 i = 1025 为什么? 不是应该 1023的嘛~~(0 - 1023)
    bb.limit()是1024.
    while(i++ < bb.limit())
    当i=1024的时候,i<bb.limit()不成立.i++是i使用完之后加1,i成为1025.
      

  2.   

    bb.rewind(); //问题2:这里的 .rewind()方法有什么作用?和 clear()有什么区别?
    bb.asShortBuffer().put((short)471142);  //问题3:为什么这里输出的是99471142?这里的99是什么
    这个应该去看jdk帮助文档
      

  3.   

    你直接看一下(short)471142这个数是多少?
      

  4.   

    I am in company, no Chinese environment. So....