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

标签 java nio bytebuffer

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

相关文章:

java - 根据特定数据集验证 ArrayList 内容

Java "this"计划任务中的空检查

java - java代码会导致linux中的段错误吗?

java - 如何在java7中为特定用户设置文件访问属性

java多服务器聊天架构

java - 我无法编辑文本文件中的记录。语言 : JAVA IDE: NETBEANS

java - EJB 和 WatchService

Dart 用 List<int> 填充 ByteData

android-ndk - 来自 NIO Direct ByteBuffer 的 Android RenderScript 分配副本

java - java中混合整数和字符串字节缓冲区