Java:转换 ByteBuffer 多维数组

Posted

技术标签:

【中文标题】Java:转换 ByteBuffer 多维数组【英文标题】:Java: Converting ByteBuffer multidimensional array 【发布时间】:2020-04-12 08:24:52 【问题描述】:

我有一个 ByteBuffer,它有一个大小为1x50176x3 的多维数组。我想将此 ByteBuffer 提取/转换回数组,以便我可以访问其中的某些元素。实现这一目标的最有效方法是什么?以下是我用来构造这个 ByteBuffer 的代码:

btBuf = ByteBuffer.allocateDirect(1 * 50176 * 3 * 4); //Allocate Memory
btBuf.order(ByteOrder.nativeOrder());

putDataInBuffer(btBuf); //Call to put the data in above ByteBuffer

【问题讨论】:

Convert ByteBuffer to byte array java 【参考方案1】:

您可以使用 hasArray 检查 ByteBuffer 是否由数组支持,如果是,则使用 array 将其转换回来。这很快,但并非所有缓冲区都以这种方式支持。

您始终可以将 ByteBuffer 转换为数组,但这几乎没有效率。相反,我会将其转换为您的基本数据类型的缓冲区(除非它是字节,在这种情况下您已经设置),例如 asIntBuffer 用于 int。然后手动计算索引并使用get(index) 访问元素。

例如,对于索引 x、y 和 z,索引可以计算为 x + y*width + z*width*height,其中 width 是 x 维度大小,height 是 y 维度大小。

您可能需要进行试验,以确保您计算索引的方式与您写入转换为缓冲区的数组时数组的工作方式一致。

编辑:使用 allocateDirect,您的缓冲区不是由数组支持的,因此可以使用第二种方法。

【讨论】:

以上是关于Java:转换 ByteBuffer 多维数组的主要内容,如果未能解决你的问题,请参考以下文章

将c多维数组转换为多维c++向量

Java多维数组到字符串和字符串到数组

将平面数组转换为分层的多维数组

将多维数组转换为单个数组

C#多维数组转换成数组[重复]

多维数组指向多维数组