Java:转换ByteBuffer多维数组



我有一个ByteBuffer,它有一个大小为1x50176x3的多维数组。我想将这个ByteBuffer提取/转换回数组,这样我就可以访问其中的某些元素。实现这一点最有效的方法是什么?以下是我用来构建这个字节缓冲区的代码:

btBuf = ByteBuffer.allocateDirect(1 * 50176 * 3 * 4); //Allocate Memory
btBuf.order(ByteOrder.nativeOrder());
putDataInBuffer(btBuf); //Call to put the data in above ByteBuffer

您可以检查ByteBuffer是否由具有hasArray的数组支持,如果是,则使用array将其转换回。这很快,但并不是所有的缓冲区都是这样备份的。

您总是可以将ByteBuffer转换为数组,但这很难有效。相反,我会将它转换为任何基本数据类型的缓冲区(除非它是字节,在这种情况下你已经设置好了(,例如用asIntBuffer表示int。然后手动计算索引,并用get(index)访问元素。

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

如果向转换为缓冲区的数组进行写入,则可能需要进行实验,以确保计算索引的方式与数组执行任务的方式一致。

EDIT:使用allocateDirect,缓冲区不由数组支持,因此要使用第二个方法。

最新更新