最好的方法是什么?
我尝试了以下方法:
ByteBuffer cacheBuffer=ByteBuffer.allocateDirect(nm(nLimit,0)); //where nm(nLimit,0) is a large number
double[] cache=cacheBuffer.asDoubleBuffer().array();
但是我遇到了这个异常:
java.lang.UnsupportedOperationException
at java.nio.DoubleBuffer.array(Unknown Source)
为什么?
编辑:
它看起来像 javadoc“返回支持此缓冲区的 double 组(可选操作)”。实际上意味着 array() 方法只是返回已经支持该缓冲区的 double 组。我认为它将以某种方式将缓冲区转换为 double[] 。所以现在我得到了一个异常(exception)是有道理的。
最佳答案
只有当您希望数组只是一个副本时,这才有效。
final DoubleBuffer buffer = cacheBuffer.asDoubleBuffer();
final double[] copy = new double[buffer.remaining()];
buffer.get(copy);
您的尝试失败的原因是因为array
仅支持非直接缓冲区;直接缓冲区不受数组支持。
关于Java:将直接 ByteBuffer 转换为 double[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12228152/