final boolean hasArray()方法的作用:判断此缓冲区是否具有可访问的底层实现数组。该方法的内部源代码如下:
public final boolean hasArray() { return (hb != null) && !isReadOnly; }
示例代码如下:
public class Test12 { public static void main(String[] args) throws IOException { ByteBuffer byteBuffer = ByteBuffer.allocate(100); byteBuffer.put((byte) 1); byteBuffer.put((byte) 2); System.out.println(byteBuffer.hasArray()); } }
程序运行结果如下:
true
也可以对直接缓冲区进行判断,示例代码如下:
public class Test12_1 { public static void main(String[] args) throws IOException { ByteBuffer byteBuffer = ByteBuffer.allocateDirect(100); byteBuffer.put((byte) 1); byteBuffer.put((byte) 2); System.out.println(byteBuffer.hasArray()); } }
程序运行结果如下:
false
打印true值是因为在源代码:
public abstract class ByteBuffer extends Buffer implements Comparable<ByteBuffer> { final byte[] hb;
程序中使用byte[]hb存储数据,所以hb[]对象为非空,结果就是true。
打印false代表byte[]hb数组值为null,并没有将数据存储到hb[]中,而是直接存储在内存中。
hasArray()方法的内部源代码
public final boolean hasArray() { return (hb != null) && !isReadOnly; }
正是以byte[]hb是否有值来判断是否有底层数组支持。