购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.11 判断是否有底层实现的数组

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是否有值来判断是否有底层数组支持。 UUF21D3+Ez5LMr6BbKkhrRHCbH0CYDiBH/pQx+CcCk9PgeEK3FHP1bb5ycUV9J8B

点击中间区域
呼出菜单
上一章
目录
下一章
×