我在以下代码中得到了UnsupportedOperationException:
byte[] temp = ByteBuffer.allocateDirect(10).array();
我检查了java specification,它说:
UnsupportedOperationException - 如果此缓冲区未由可访问的数组支持
以下是我的问题:
(1)这是否意味着如果通过ByteBuffer.allocateDirect
创建byteBuffer,则此byteBuffer始终不受可访问数组的支持?
(2)我知道这个byteBuffer是在Java堆之外分配的,但是这个分配的实现是什么。也许通过OS系统调用?那么阵列是否可访问取决于我们使用的操作系统?
答案 0 :(得分:1)
好吧,至于part(1),不,缓冲区不必由Java数组支持 - 并且在构造时不是这样。
对于(2),实际实现将依赖于底层操作系统,因为实现使用本机OS调用来实际实现该数组。在Linux上你会期望它使用malloc()内核调用来保留一些内存,然后使用进一步的本机调用直接读/写;其他系统显然会有自己的等价物,JVM会调用它们。