为什么在ByteBuffer.allocateDirect(10).array()上得到UnsupportedOperationException

时间:2015-02-17 15:57:33

标签: java nio bytebuffer

我在以下代码中得到了UnsupportedOperationException:

byte[] temp = ByteBuffer.allocateDirect(10).array();

我检查了java specification,它说:

  

UnsupportedOperationException - 如果此缓冲区未由可访问的数组支持

以下是我的问题:

(1)这是否意味着如果通过ByteBuffer.allocateDirect创建byteBuffer,则此byteBuffer始终不受可访问数组的支持?

(2)我知道这个byteBuffer是在Java堆之外分配的,但是这个分配的实现是什么。也许通过OS系统调用?那么阵列是否可访问取决于我们使用的操作系统?

1 个答案:

答案 0 :(得分:1)

好吧,至于part(1),不,缓冲区不必由Java数组支持 - 并且在构造时不是这样。

对于(2),实际实现将依赖于底层操作系统,因为实现使用本机OS调用来实际实现该数组。在Linux上你会期望它使用malloc()内核调用来保留一些内存,然后使用进一步的本机调用直接读/写;其他系统显然会有自己的等价物,JVM会调用它们。