我在以下代码中得到了 UnsupportedOperationException:
byte[] temp = ByteBuffer.allocateDirect(10).array();
我检查了java specification ,它说:
UnsupportedOperationException - If this buffer is not backed by an accessible array
这是我的问题:
(1) 如果 byteBuffer 是通过 ByteBuffer.allocateDirect
创建的,这意味着吗? ,这个 byteBuffer 总是不受可访问数组支持?
(2) 我知道这个 byteBuffer 是在 Java 堆之外分配的,但是这个分配的实现是什么。也许通过操作系统系统调用?那么数组是否可访问取决于我们使用的操作系统?
最佳答案
嗯,对于第 (1) 部分,不,缓冲区不必由 Java 数组支持 - 并且在这样构造时也不需要。
对于 (2),实际实现将取决于底层操作系统,因为该实现使用 native 操作系统调用来实际实现数组。在 Linux 上,您可能会期望它使用 malloc() 内核调用来保留一些内存,然后使用进一步的 native 调用直接读取/写入这些内存;其他系统显然会有自己的等效项,JVM 会调用它们。
关于java - 为什么在 ByteBuffer.allocateDirect(10).array() 上出现 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565569/