尽管ByteBuffer只能保存字节类型的数据,但是它具有可以从其容纳的的字节中产生出各种不同基本类型的方法。下面这个例子展示了怎样使用这些方法来插入和抽取各种数值:
public class GetData { private static final int BSIZE=1024; public static void main(String[] args){ //一个字节8位,一个字符2个字节 ByteBuffer buffer=ByteBuffer.allocate(BSIZE); int i=0; while (i++<buffer.limit()){ if(buffer.get()!=0) System.out.println("nonzero"); System.out.println("i="+i); } buffer.rewind(); buffer.asCharBuffer().put("Howday!"); char c; while ((c=buffer.getChar())!=0){ System.out.println(c); } buffer.rewind(); buffer.asShortBuffer().put((short)471142); System.out.print(buffer.getShort()); buffer.rewind(); buffer.asIntBuffer().put(9999); System.out.println(buffer.getInt()); buffer.rewind(); buffer.asLongBuffer().put(89088908); System.out.println(buffer.getLong()); buffer.rewind(); buffer.asFloatBuffer().put(999878); System.out.print(buffer.getFloat()); buffer.rewind(); } }
在分配一个ByteBuffer之后,可以通过检测它的值来查看缓冲器的分配方式是否将其内容自动置0--它确实是这样做了。这里一共检测了1024个值(由缓冲器limit()决定),并且所有值都是0.
向ByteBuffer插入基本类型数据的最简单的方法是:利用asCharBuffer()、asShortBuffer()等获得该缓冲器上的视图,然后使用视图的put()方法。此方法适用所有基本数据类型。