日期:2014-05-20  浏览次数:20692 次

这些抽象方法是怎么起作用的?
ByteBuffer   bb   =   ByteBuffer.allocate(BSIZE);
        bb.asCharBuffer().put( "Howdy! ");
        char   c;
        while((c   =   bb.getChar())   !=   0)
          System.out.print(c   +   "   ");
bb.rewind();
        //   Store   and   read   a   short:
        bb.asShortBuffer().put((short)471142);
        System.out.println(bb.getShort());
        bb.rewind();
        //   Store   and   read   an   int:
        bb.asIntBuffer().put(99471142);
        System.out.println(bb.getShort());
        bb.rewind();
为什么bb.getChar()一次只能获得一个英文字母
而bb.getShort(),bb.getShort()一次就能获得放入的数字
而API中他们的定义都是:
读取此缓冲区的当前位置之后的两个字节,根据当前的字节顺序将它们组成   short(或char或int)   值,然后将该位置增加   2
怎么结果不是类似的
还有,ByteBuffer是抽象类,它的get,put方法都是抽象的,怎么可以返回值?

------解决方案--------------------
应该是内部的实现机制的问题,getchar应该是指读入一个字节,而getshort应该是读入一个字符串
------解决方案--------------------
因为 ByteBuffer 是一个抽象类,也就是说不能生成对象的。它的对象是由其 allocate() 的静态方法生成的。那就可以到 JDK 的源代码中找到这个类和这个方法,就可以知道它 return 的类型了。

另:JDK 的源代码在你 JDK 安装好的的目录下有个 src.zip 的文件,解开来就是 JDK 的源代码了。