gpt4 book ai didi

java - 为什么在 ByteBuffer.allocateDirect(10).array() 上出现 UnsupportedOperationException

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:10 27 4
gpt4 key购买 nike

我在以下代码中得到了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com