如何将 byte[] 转换为 bytebuffer 本机内存?

Posted

技术标签:

【中文标题】如何将 byte[] 转换为 bytebuffer 本机内存?【英文标题】:How to convert byte[] to bytebuffer native memory? 【发布时间】:2011-07-28 07:06:53 【问题描述】:

我需要将大量内存传递给 jni 端来解析它。 我之前使用 GetByteArrayElements 来获取本机指针。但我发现这种方法总是复制内存,而不是直接使用内存。 所以我使用 GetDirectBufferAddress 直接获取内存以避免内存复制。 这就要求必须使用 allocateDirect 方法来分配内存。 但是给我的内存是字节数组,不是本机内存。 有没有办法将 byte[] 转换为 bytebuffer? 谢谢。

【问题讨论】:

您正在获取数据并从 VM(原始数组)内部移动到 VM 外部的位置(本机操作系统内存空间)——不幸的是,当数据在“血脑”屏障。 【参考方案1】:

不幸的是,您将不得不使用put 并将您的字节数组复制到使用allocateDirect 分配的缓冲区中。

【讨论】:

那真的很不幸。内存复制无法避免,在java端或jni端。

以上是关于如何将 byte[] 转换为 bytebuffer 本机内存?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中将 ByteBuffer 转换为字符串

ByteBuffer 和字节数组

UnsupportedOperationException 将 byte[] 转换为 float[]

如何将一个字节数组转换为两个长值?

浅谈ByteBuffer转换成byte[]时遇到的问题

将 int 转换为 byte 时出现 BufferOverflowException